介绍
WordPressusers
表被设计为只包含关于用户的基本信息。
Note:
从WP 4.7开始,该表包含:
从WP 4.7开始,该表包含:
ID
、user_login
、user_pass
、user_nicename
、user_email
、user_url
、user_registered
、user_activation_key
、user_status
和display_name
。因此,为了存储额外的数据,引入了usermeta
表,该表可以存储关于用户的任意数量的数据。
基于users
表中的ID
,使用一对多关系将两个表绑定在一起。
操作用户元数据(Metadata)
操作用户元数据有两种主要方式。
- 用户个人资料界面中的表单字段。
- 以编程方式,通过函数调用。
通过表单字段
表单字段选项适用于用户可以访问WordPress管理区域的情况,在该区域中,用户可以查看和编辑个人资料。
在深入研究示例之前,了解过程中涉及的钩子以及它们存在的原因很重要。
show_user_profile 钩子
每当用户编辑它自己的用户个人资料时,就会触发此动作钩子。
记住,没有编辑自己个人资料能力的用户不会触发此钩子。
edit_user_profile 钩子
每当用户编辑其他人的用户个人资料时,就会触发此动作钩子。
记住,没有编辑第三方个人资料能力的用户不会触发此钩子。
示例表单字段
在下面的示例中,我们将向所有个人资料界面添加生日字段。在个人资料更新时将其保存到数据库。
<?php /** * The field on the editing screens. * * @param $user WP_User user object */ function wporg_usermeta_form_field_birthday( $user ) { ?> <h3>It's Your Birthday</h3> <table class="form-table"> <tr> <th> <label for="birthday">Birthday</label> </th> <td> <input type="date" class="regular-text ltr" id="birthday" name="birthday" value="<?= esc_attr( get_user_meta( $user->ID, 'birthday', true ) ) ?>" title="Please use YYYY-MM-DD as the date format." pattern="(19[0-9][0-9]|20[0-9][0-9])-(1[0-2]|0[1-9])-(3[01]|[21][0-9]|0[1-9])" required> <p class="description"> Please enter your birthday date. </p> </td> </tr> </table> <?php } /** * The save action. * * @param $user_id int the ID of the current user. * * @return bool Meta ID if the key didn't exist, true on successful update, false on failure. */ function wporg_usermeta_form_field_birthday_update( $user_id ) { // check that the current user have the capability to edit the $user_id if ( ! current_user_can( 'edit_user', $user_id ) ) { return false; } // create/update user meta for the $user_id return update_user_meta( $user_id, 'birthday', $_POST['birthday'] ); } // Add the field to user's own profile editing screen. add_action( 'show_user_profile', 'wporg_usermeta_form_field_birthday' ); // Add the field to user profile editing screen. add_action( 'edit_user_profile', 'wporg_usermeta_form_field_birthday' ); // Add the save action to user's own profile editing screen update. add_action( 'personal_options_update', 'wporg_usermeta_form_field_birthday_update' ); // Add the save action to user profile editing screen update. add_action( 'edit_user_profile_update', 'wporg_usermeta_form_field_birthday_update' );
以编程方式
此选项适用于构建自定义用户区域和/或计划禁用对WordPress管理区域的访问的情况。
可用于操作用户元数据的函数有:add_user_meta()
、update_user_meta()
、delete_user_meta()
和get_user_meta()
。
添加
add_user_meta( int $user_id, string $meta_key, mixed $meta_value, bool $unique = false );
有关所用参数的完整说明,请参阅关于add_user_meta()
的函数参考。
更新
update_user_meta( int $user_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' );
有关所用参数的完整解释,请参阅关于update_user_meta()
的函数参考。
删除
delete_user_meta( int $user_id, string $meta_key, mixed $meta_value = '' );
有关所用参数的完整解释,请参阅关于delete_user_meta()
的函数参考。
获取
get_user_meta( int $user_id, string $key = '', bool $single = false );
有关所用参数的完整解释,请参阅有关get_user_meta()
的函数参考。
请注意,如果只传递$user_id
,该函数将作为关联数组检索所有元数据。
您可以在插件或主题中的任何位置呈现用户元数据。