Tạo trường liên hệ người dùng WordPress của riêng bạn
Hôm nay tôi đã tạo một plugin mới cho bạn. Một plugin xử lý các phương thức liên hệ của người dùng. Về cơ bản, khi bạn chỉnh sửa người dùng trong phần quản trị, sẽ có khối “thông tin liên hệ”. Chà, tôi muốn chỉ cho bạn cách thêm các trường của riêng bạn vào đó và đi xa hơn một chút, cách hiển thị (hoặc không) các trường mới này trên trang đăng ký.
Đây là bản xem trước của những gì chúng tôi sẽ tạo:
Và để làm như vậy, như thường lệ, chúng ta sẽ tạo một plugin đơn giản và đẹp mắt!
Bước 1: Tạo Plugin
Tạo một thư mục mới trong wp-content/plugins và gọi nó là “phương thức liên hệ người dùng tùy chỉnh”. Bên trong thư mục mới tạo này, hãy tạo một tệp có tên “rc-custom-user-contact-methods.php” và mở nó trong phần mềm chỉnh sửa yêu thích của bạn.
Đặt nội dung này vào tập tin trống của bạn. Mã này chỉ cần đăng ký plugin:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
Bước 2: Xác định trường tùy chỉnh của bạn
Tiếp theo, chúng ta cần tạo một biến sẽ chứa các trường tùy chỉnh của chúng ta, những trường sẽ sử dụng trong trang ấn bản người dùng và cả trên trang mặc định đăng ký. Hãy lưu trữ các trường này vào một biến có tên $extra_fields.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
Chúng tôi đang lưu trữ mọi trường trong một mảng có 3 tham số, tham số đầu tiên là ID trường, trường thứ hai là nhãn trường và trường cuối cùng là thông tin boolean xác định xem trường có được hiển thị trên trang đăng ký hay không . Bạn có thể thêm bao nhiêu tham số tùy thích, ví dụ như trình giữ chỗ hoặc thông tin bắt buộc.
Bước 3: Móc bộ lọc phù hợp
Bây giờ chúng ta cần nối một hàm vào bộ lọc phù hợp. Trong trường hợp cụ thể của chúng tôi, bộ lọc là “user_contactmethods” và tên của hàm chúng tôi sẽ tạo là “rc_add_user_contactmethods”.
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
Bước 4: Tạo trường tùy chỉnh của chúng tôi
Bây giờ chúng ta cần tạo hàm “rc_add_user_contactmethods”. Đó là trường sẽ thêm các trường tùy chỉnh của chúng tôi vào trang chỉnh sửa người dùng. Tin vui là chúng tôi đã lưu trữ các trường của mình trong một mảng, điều đó có nghĩa là hàm sau sẽ hoàn toàn động và sẽ khá dễ dàng để thêm các trường mới chỉ bằng cách sửa đổi biến $extra_fields.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
Ở bước này, nếu bạn lưu và kích hoạt plugin, bạn sẽ thấy các trường tùy chỉnh của mình trong trang chỉnh sửa người dùng. Vì chúng tôi đang sử dụng đúng hook nên chúng tôi không phải tạo dữ liệu trường “lưu”. Vì vậy, plugin này hiện đang hoạt động rất tốt. Nhưng tôi muốn đi xa hơn một chút và thêm tùy chọn hiển thị các trường đó trên trang đăng ký. Đảm bảo bạn chọn hộp kiểm “Bất kỳ ai cũng có thể đăng ký” trong phần cài đặt, nếu không bạn sẽ không thể thấy liên kết “Đăng ký”.
Bước 5: Móc trang đăng ký
Để thêm các trường của chúng tôi trên trang đăng ký, chúng tôi cần truy cập ít nhất hai hook và tạo hai hàm. Một để hiển thị các trường và cái thứ hai để lưu dữ liệu trường vào cơ sở dữ liệu.
Hãy kết nối các chức năng của chúng ta:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
Bước 6: Hiển thị trang đăng ký trường tùy chỉnh
Trong đoạn mã trên, chúng tôi đã khai báo hai hàm. Đầu tiên là hiển thị các trường trên trang đăng ký. Trong phần này, chúng ta cần quan tâm đến tham số thứ ba của mỗi mảng trong $extra_fields. Tham số boolean này cho biết các trường có được hiển thị hay không. Đúng: trường được hiển thị, sai: trường không được hiển thị.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
Bước 7: Lưu trữ giá trị trường sau quá trình đăng ký
Bây giờ các trường của chúng tôi đã được hiển thị trên trang đăng ký, chúng tôi cần lưu trữ các giá trị của chúng vào cơ sở dữ liệu. Đây là mục đích của chức năng “rc_user_register_save_extra_fields”. Để làm như vậy, chúng ta cần sử dụng hàm “wp_update_user()”.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Phần kết luận
Chà, chúng ta đã biết những điều cơ bản về cách thêm trường mới vào phương thức liên hệ của người dùng, nhưng chỉ có vậy thôi. Ví dụ: bạn có thể xóa các trường hiện có như “Yahoo IM”, “AIM” và “Jabber” bằng cách thực hiện một thao tác unset() đơn giản. Nhưng bạn cũng có thể thêm một số chức năng để dọn dẹp các trường tùy chỉnh của mình nhằm kiểm tra chẳng hạn như số điện thoại có định dạng phù hợp hay không, trường có bắt buộc hay không, v.v.… Đừng ngần ngại hỏi các tính năng cụ thể trong phần nhận xét!
Ồ, và điều cuối cùng… nếu bạn muốn hiển thị dữ liệu của bất kỳ trường nào của mình, chỉ cần sử dụng dữ liệu này:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );