Thêm các trường tùy chỉnh vào hồ sơ người dùng plugin WordPress

WordPress lưu trữ thông tin người dùng ngay lập tức và nó quan tâm đến tên, email của người dùng và một số thông tin cơ bản khác, nó để lại rất nhiều điều mong muốn. Ví dụ: các liên kết mạng xã hội ngày nay được yêu cầu khá nhiều, nhưng vì các mạng xã hội đến và đi hàng ngày, nên bản thân WordPress không thể cam kết hỗ trợ bất kỳ một mạng nào vì nó có thể không tồn tại vào ngày mai. Ngày sinh của người dùng cũng khá quan trọng đối với một số trang web (ví dụ: với nội dung bị giới hạn độ tuổi), tuy nhiên, vì ngày sinh của người dùng có thể được coi là thông tin bí mật hoặc thông tin nhận dạng nên có thể là bất hợp pháp (hoặc yêu cầu giấy phép đặc biệt) trong . Một lần nữa, WordPress sẽ không tự thu thập thông tin này để cung cấp cho chúng tôi (người dùng của nó) quyền tự do sử dụng thông tin đó bất kể vị trí của chúng tôi. Do đó, nó cung cấp phương tiện để tự xây dựng hỗ trợ cho thông tin bổ sung này

Dựa trên hướng dẫn trước của chúng tôi, Cách thêm các trường tùy chỉnh vào biểu mẫu đăng ký WordPress, chúng tôi đã thu thập năm sinh của người dùng khi đăng ký và hiển thị nó trên trang hồ sơ của người dùng, bây giờ chúng ta sẽ tìm hiểu cách làm cho thông tin này có thể chỉnh sửa được để . Đảm bảo rằng bạn đã đọc hướng dẫn trước khi đọc hướng dẫn này, vì chúng tôi sẽ sử dụng lại và mở rộng mã của nó

Mã được trình bày trong hướng dẫn này cũng là mã cần thiết cho bất kỳ trường người dùng tùy chỉnh nào không cần có trong biểu mẫu đăng ký. Giống như tên và họ của người dùng

Hiển thị trường người dùng

Như đã đề cập trong hướng dẫn về biểu mẫu đăng ký, các hành động ‘show_user_profile‘ và ‘edit_user_profile‘ có sẵn để thêm các trường người dùng của chúng tôi. Cái trước kích hoạt khi người dùng đang xem/chỉnh sửa thông tin hồ sơ của chính họ, trong khi cái sau kích hoạt khi người dùng (chẳng hạn như quản trị viên) nhìn thấy/chỉnh sửa hồ sơ của người dùng khác. Cả hai hành động đều chuyển một đối tượng WP_User làm tham số duy nhất của chúng. Mã trước đây của chúng tôi, đã sử dụng những hành động đó, là

add_action( 'show_user_profile', 'crf_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'crf_show_extra_profile_fields' );

function crf_show_extra_profile_fields( $user ) {
	?>
	<h3><?php esc_html_e( 'Personal Information', 'crf' ); ?></h3>

	<table class="form-table">
		<tr>
			<th><label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ); ?></label></th>
			<td><?php echo esc_html( get_the_author_meta( 'year_of_birth', $user->ID ) ); ?></td>
		</tr>
	</table>
	<?php
}

Hãy tiếp tục và thay đổi năm sinh văn bản thuần túy thành một yếu tố đầu vào để nó có thể chấp nhận đầu vào của người dùng

add_action( 'show_user_profile', 'crf_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'crf_show_extra_profile_fields' );

function crf_show_extra_profile_fields( $user ) {
	$year = get_the_author_meta( 'year_of_birth', $user->ID );
	?>
	<h3><?php esc_html_e( 'Personal Information', 'crf' ); ?></h3>

	<table class="form-table">
		<tr>
			<th><label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ); ?></label></th>
			<td>
				<input type="number"
			       min="1900"
			       max="2017"
			       step="1"
			       id="year_of_birth"
			       name="year_of_birth"
			       value="<?php echo esc_attr( $year ); ?>"
			       class="regular-text"
				/>
			</td>
		</tr>
	</table>
	<?php
}

Hãy kiểm tra trang hồ sơ của chúng tôi

Thêm các trường tùy chỉnh vào hồ sơ người dùng plugin WordPress

Lưu ý rằng tôi đang thử nghiệm bằng người dùng đã đăng ký trong hướng dẫn trước của chúng tôi, vì vậy năm sinh đã được cung cấp trong quá trình đăng ký. Nếu bạn đang dùng thử trên người dùng đã có từ trước, năm sinh sẽ trống. Không sao đâu. Chỉ cần điền vào và tiếp tục làm theo hướng dẫn

Xác thực trường

Chúng tôi có thể sử dụng hành động 'user_profile_update_errors' để xác thực và trả lại lỗi cho biểu mẫu của chúng tôi. Nó cung cấp ba tham số, $errors, $update và $user, giữ lỗi, cờ cập nhật và đối tượng WP_User tương ứng. Có lẽ bạn nhớ rằng chúng tôi đã sử dụng hành động này để xác thực biểu mẫu đăng ký người dùng phía quản trị viên (e. g. từ quản trị viên). Mã chúng tôi đã sử dụng trong hướng dẫn là

add_action( 'user_profile_update_errors', 'crf_user_profile_update_errors', 10, 3 );
function crf_user_profile_update_errors( $errors, $update, $user ) {
	if ( $update ) {
		return;
	}

	if ( empty( $_POST['year_of_birth'] ) ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: Please enter your year of birth.', 'crf' ) );
	}

	if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) < 1900 ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: You must be born after 1900.', 'crf' ) );
	}
}

Các dòng 3-5 đã kiểm tra xem liệu yêu cầu có phải là để cập nhật người dùng hay không (không áp dụng ở phần hướng dẫn đó, vì đó là về biểu mẫu đăng ký) và nếu có, nó chỉ được bảo lãnh. Chà, trong hướng dẫn này, chúng tôi muốn nó áp dụng cả khi đăng ký và khi cập nhật các trường người dùng để chúng tôi có thể xóa hoàn toàn những dòng đó

add_action( 'user_profile_update_errors', 'crf_user_profile_update_errors', 10, 3 );
function crf_user_profile_update_errors( $errors, $update, $user ) {
	if ( empty( $_POST['year_of_birth'] ) ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: Please enter your year of birth.', 'crf' ) );
	}

	if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) < 1900 ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: You must be born after 1900.', 'crf' ) );
	}
}

Nếu chúng tôi chỉ muốn xác thực khi cập nhật, vì ví dụ: trường không có trong biểu mẫu đăng ký, thay vào đó, chúng tôi sẽ phủ định câu lệnh if()

Bây giờ, nếu chúng ta thử và nhập một giá trị không hợp lệ, e. g. 1800

Thêm các trường tùy chỉnh vào hồ sơ người dùng plugin WordPress

Lưu trường

Giống như các tác vụ 'show_user_profile' và 'edit_user_profile' đã đề cập trước đó, các tác vụ 'personal_options_update' và 'edit_user_profile_update' kích hoạt khi nhấn nút "Cập nhật hồ sơ", khi cập nhật tương ứng của chính bạn hoặc của người dùng khác. Cả hai hành động đều vượt qua ID của người dùng đã sửa đổi, vì vậy chúng tôi có thể xử lý cả hai trường hợp chỉ bằng một chức năng

add_action( 'personal_options_update', 'crf_update_profile_fields' );
add_action( 'edit_user_profile_update', 'crf_update_profile_fields' );

function crf_update_profile_fields( $user_id ) {
	if ( ! current_user_can( 'edit_user', $user_id ) ) {
		return false;
	}

	if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) >= 1900 ) {
		update_user_meta( $user_id, 'year_of_birth', intval( $_POST['year_of_birth'] ) );
	}
}

Chúng ta chỉ cần đảm bảo hai điều

  1. Người dùng hiện tại có quyền sửa đổi người dùng được đề cập (dòng 5) và
  2. Trường có giá trị hợp lệ. Mã liên quan bên trong hàm crf_user_profile_update_errors(), chỉ nối thêm các thông báo lỗi trên màn hình. Mặc dù vậy, quá trình thực thi vẫn tiếp tục bình thường và nếu chúng tôi không đảm bảo giá trị hợp lệ trước khi lưu nó (dòng 9), chúng tôi sẽ sớm nhận được các giá trị xấu

Bây giờ bạn có thể kiểm tra xem mọi thay đổi bạn thực hiện đối với trường năm sinh có được duy trì đúng cách không

gói nó lên

Do tham khảo lại plugin được xây dựng trong hướng dẫn trước, nên có thể không rõ bạn sẽ thêm năm sinh như thế nào vào trường hồ sơ người dùng, bỏ qua mọi mã, hướng dẫn trước đó, v.v. Đây là cách bạn thêm trường

<?php
/*
Plugin Name: Custom Profile Fields
Plugin URI:
Description:
Version: 0.1
Author: CSSIgniter
Author URI:
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/

add_action( 'show_user_profile', 'crf_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'crf_show_extra_profile_fields' );

function crf_show_extra_profile_fields( $user ) {
	$year = get_the_author_meta( 'year_of_birth', $user->ID );
	?>
	<h3><?php esc_html_e( 'Personal Information', 'crf' ); ?></h3>

	<table class="form-table">
		<tr>
			<th><label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ); ?></label></th>
			<td>
				<input type="number"
			       min="1900"
			       max="2017"
			       step="1"
			       id="year_of_birth"
			       name="year_of_birth"
			       value="<?php echo esc_attr( $year ); ?>"
			       class="regular-text"
				/>
			</td>
		</tr>
	</table>
	<?php
}

add_action( 'user_profile_update_errors', 'crf_user_profile_update_errors', 10, 3 );
function crf_user_profile_update_errors( $errors, $update, $user ) {
	if ( ! $update ) {
		return;
	}

	if ( empty( $_POST['year_of_birth'] ) ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: Please enter your year of birth.', 'crf' ) );
	}

	if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) < 1900 ) {
		$errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: You must be born after 1900.', 'crf' ) );
	}
}


add_action( 'personal_options_update', 'crf_update_profile_fields' );
add_action( 'edit_user_profile_update', 'crf_update_profile_fields' );

function crf_update_profile_fields( $user_id ) {
	if ( ! current_user_can( 'edit_user', $user_id ) ) {
		return false;
	}

	if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) >= 1900 ) {
		update_user_meta( $user_id, 'year_of_birth', intval( $_POST['year_of_birth'] ) );
	}
}

Và đây là giao diện nếu nó được bao gồm trong plugin mà chúng tôi đã phát triển trước đây trong hướng dẫn về biểu mẫu đăng ký