get_user_by là hàm dùng để lấy thông tin về thành viên dựa trên một trường cụ thể nào đó. get_user_by() có thể dùng để lấy thông tin user dựa trên username, login name, user id, user_email,…
Theo như giải thích của phía nhà phát triển WordPress thì get_user_by là một pluggable function, tức là nó có thể được thay thế bằng một plugin. Có nghĩa là chức năng này chỉ được hoạt động sau khi tất cả các plugin đã được tải. Trước thời điểm này, hàm này chưa được xác định, do đó, bạn không thể gọi hàm này và tất cả các hàm phụ thuộc vào hàm này trực tiếp từ trong plugin.
Chúng cần được gọi trên hook plugins_loaded trở lên, ví dụ như trên init hook. Ngoài ra, nếu trong plugin, bạn tạo một function với tên get_user_by thì hàm này sẽ bị ghi đè và function bạn tạo mới sẽ được sử dụng.
Table of Contents
Hàm get_user_by nằm ở đâu?
Hàm này nằm ở lõi (core) của WordPress. Nó được giới thiệu lần đầu tiên trong bản WordPress 2.8.0, sau đó được cải tiến và được sử dụng đến tận bây giờ là phiên bản 6.2.2. Tại phiên bản 4.4.0 thì có thêm một cải tiến là thêm ID (chữ in hoa) thành alias cho id (chữ thường). Bạn có thể tìm thấy hàm get_user_by ở file này: wp-includes/pluggable.php
Cấu trúc:
function get_user_by( $field, $value ) { $userdata = WP_User::get_data_by( $field, $value ); if ( ! $userdata ) { return false; } $user = new WP_User; $user->init( $userdata ); return $user; }
Cách sử dụng hàm get_user_by()
Hàm get_user_by cần 2 thông số truyền vào để nó có thể xử lý. Bắt buộc phải có 2 tham số $field và $value, thiếu một trong 2 tham số sẽ đều cho kết quả rỗng (false). Cách sử dụng như sau
get_user_by( $field, $value )
Trong đó:
$field là dữ liệu dạng string, truyền vào để xác định trường cần so sánh dữ liệu. $field ở đây có thể là username, user_id, user_email...
$value là giá trị để so sánh, $value có thể là số nếu $field là id, có thể là text nếu $field là username hoặc name, có thể là email nếu $field là user_email
lưu ý là $field nó phân biệt chữ hoa chữ thường. Ví dụ id khác với login nên get_user_by( ‘LOGIN’, ‘admin’ ) sẽ không trả về kết quả gì, câu lệnh đúng phải là get_user_by( ‘login, ‘admin’ ).
$user = get_user_by( 'id', '7' ); echo "Bài được viết bởi: $user->display_name";
Giá trị trả về của hàm get_user_by
Giá trị trả về của hàm get_user_by là một object chứa dữ liệu các trường thông tin về thành viên đó nếu có kết quả. Giá trị là rỗng nếu không có kết quả.
Ví dụ:
$tac_gia = get_user_by('id', 1); // lấy tất cả các thông tin về thành viên có id là 1
Giá trị trả về:
object(WP_User)#96 (7) { ["data"]=> object(stdClass)#95 (10) { ["ID"]=> string(1) "1" ["user_login"]=> string(10) "superadmin" ["user_pass"]=> string(34) "$P$Bx0Jgq5/Qw/o3A8fXcVKg4jxQraPAB3" ["user_nicename"]=> string(10) "superadmin" ["user_email"]=> string(16) "[email protected]" ["user_url"]=> string(0) "" ["user_registered"]=> string(19) "2014-02-21 21:31:40" ["user_activation_key"]=> string(0) "" ["user_status"]=> string(1) "0" ["display_name"]=> string(10) "superadmin" } ["ID"]=> int(1) ["caps"]=> array(1) { ["administrator"]=> bool(true) } ["cap_key"]=> string(25) "wp_capabilities" ["roles"]=> array(1) { [0]=> string(13) "administrator" } ["allcaps"]=> array(63) { ["switch_themes"]=> bool(true) ["edit_themes"]=> bool(true) ["activate_plugins"]=> bool(true) ["edit_plugins"]=> bool(true) ["edit_users"]=> bool(true) ["edit_files"]=> bool(true) ["manage_options"]=> bool(true) ["moderate_comments"]=> bool(true) ["manage_categories"]=> bool(true) ["manage_links"]=> bool(true) ["upload_files"]=> bool(true) ["import"]=> bool(true) ["unfiltered_html"]=> bool(true) ["edit_posts"]=> bool(true) ["edit_others_posts"]=> bool(true) ["edit_published_posts"]=> bool(true) ["publish_posts"]=> bool(true) ["edit_pages"]=> bool(true) ["read"]=> bool(true) ["level_10"]=> bool(true) ["level_9"]=> bool(true) ["level_8"]=> bool(true) ["level_7"]=> bool(true) ["level_6"]=> bool(true) ["level_5"]=> bool(true) ["level_4"]=> bool(true) ["level_3"]=> bool(true) ["level_2"]=> bool(true) ["level_1"]=> bool(true) ["level_0"]=> bool(true) ["edit_others_pages"]=> bool(true) ["edit_published_pages"]=> bool(true) ["publish_pages"]=> bool(true) ["delete_pages"]=> bool(true) ["delete_others_pages"]=> bool(true) ["delete_published_pages"]=> bool(true) ["delete_posts"]=> bool(true) ["delete_others_posts"]=> bool(true) ["delete_published_posts"]=> bool(true) ["delete_private_posts"]=> bool(true) ["edit_private_posts"]=> bool(true) ["read_private_posts"]=> bool(true) ["delete_private_pages"]=> bool(true) ["edit_private_pages"]=> bool(true) ["read_private_pages"]=> bool(true) ["delete_users"]=> bool(true) ["create_users"]=> bool(true) ["unfiltered_upload"]=> bool(true) ["edit_dashboard"]=> bool(true) ["update_plugins"]=> bool(true) ["delete_plugins"]=> bool(true) ["install_plugins"]=> bool(true) ["update_themes"]=> bool(true) ["install_themes"]=> bool(true) ["update_core"]=> bool(true) ["list_users"]=> bool(true) ["remove_users"]=> bool(true) ["add_users"]=> bool(true) ["promote_users"]=> bool(true) ["edit_theme_options"]=> bool(true) ["delete_themes"]=> bool(true) ["export"]=> bool(true) ["administrator"]=> bool(true) } ["filter"]=> NULL }
Để code sạch và tránh lỗi thì các bạn nên validate kết quả trước khi xử lý dữ liệu. Ví dụ như sau:
$user = get_user_by( 'email', '[email protected]'); if ( ! empty( $user ) ) { echo 'User is ' . $user->first_name . '' . $user->last_name; }
Một số ví dụ về cách dùng hàm get_user_by
Lấy thông tin thành viên dựa trên id của thành viên.
$user = get_user_by( 'id', '7' ); // Lấy thông tin của thành viên có id là 7 echo "Submitted by $user->display_name";
Lấy thông tin của thành viên dựa trên email:
$user = get_user_by( 'email', '[email protected]' ); echo "Submitted by $user->display_name";
Lấy thông tin thành viên dựa vào login name:
$user = get_user_by( 'login', 'min' ); echo "Submitted by $user->display_name";
Lấy thông tin thành viên dựa vào username:
global $wpdb; $username = 'admin'; $email = $wpdb->get_var( $wpdb->prepare(" SELECT user_email FROM $wpdb->users WHERE user_login = %s ", $username ) ); echo "$username's email is: $email";
Lấy thông tin thành viên dựa vào slug:
$user = get_user_by( 'slug', 'gia-han' ); echo "Submitted by $user->display_name";
Lấy thông tin thành viên dựa vào first name hoặc last name:
Theo first name:
global $wpdb; $users = $wpdb->get_results( "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'first_name' AND meta_value = 'Hân'" ); if( $users ) { foreach ( $users as $user ) { echo '<p>' . $user->user_id . '</p>'; } } else { echo 'There are no users with the specified first name.'; }
Theo last name:
global $wpdb; $users = $wpdb->get_results( "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'last_name' AND meta_value = 'Gia'" ); if( $users ) { foreach ( $users as $user ) { echo '<p>' . $user->user_id . '</p>'; } } else { echo 'There are no users with the specified first name.'; }
Get the user id by its display_name:
function get_user_id_by_display_name( $display_name ) { global $wpdb; if ( ! $user = $wpdb->get_row( $wpdb->prepare( "SELECT `ID` FROM $wpdb->users WHERE `display_name` = %s", $display_name ) ) ) return false; return $user->ID; }
Tham khảo thêm thông tin tại trang WordPress Developer