pre_user_login
云策文档标注
概述
pre_user_login 是一个 WordPress 过滤器,用于在用户名被清理后、用户创建或更新前进行过滤。它允许开发者修改或检查已清理的用户名。
关键要点
- 过滤器在用户创建或更新前调用,适用于 wp_insert_user() 等函数。
- 参数为 $sanitized_user_login,即已清理的用户名字符串。
- 在 wp-admin/user-new.php 和 wp-includes/user.php 中均有引用,需注意其可能在多种条件下运行。
- 可用于实现自定义逻辑,如检查用户名是否已存在或修改相关用户数据。
代码示例
/**
* Check if the user has been created.
*
* @param string $login User login.
* @return string (Maybe) filtered login.
*/
function wpdocs_check_if_user_created( $login ) {
// Don't do anything to login, just see if already in database.
global $wpdb, $is_new_login;
$id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_login = '%s'", $login ) );
$is_new_login = ( isset( $id ) ) ? false : true;
return $login;
}
/**
* Filter the user nickname.
*
* @param string $nickname User nickname.
* @return string (Maybe) filtered nickname.
*/
function wpdocs_fix_nickname ( $nickname ) {
global $is_new_login;
if ( $is_new_login ) {
$first_name = empty( $_POST_['first_name'] ) ? sanitize_text_field( $_POST['first_name'] ) : '';
$last_name = empty( $_POST['last_name'] ) ? sanitize_text_field( $_POST['last_name'] ) : '';
$nickname = empty( $first_name ) ? '' : $first_name;
$nickname .= empty( $last_name ) ? '' : ' ' . $last_name;
}
return $nickname;
}
add_filter( 'pre_user_login', 'wpdocs_check_if_user_created' );
add_filter( 'pre_user_nickname', 'wpdocs_fix_nickname' );注意事项
- 此过滤器在用户创建和更新时都会运行,可能增加逻辑复杂性,需谨慎处理。
- 示例代码展示了如何结合 pre_user_login 和 pre_user_nickname 过滤器,实现新用户昵称的自动设置。
原文内容
Filters a username after it has been sanitized.
Description
This filter is called before the user is created or updated.
Parameters
$sanitized_user_loginstring-
Username after it has been sanitized.
Source
$pre_user_login = apply_filters( 'pre_user_login', $sanitized_user_login );
Changelog
| Version | Description |
|---|---|
| 2.0.3 | Introduced. |
Skip to note 2 content
lifeboat
This filter is run before a user is created and/or updated. The fact that all pre_user hooks are run in both conditions makes life a bit more complicated.
The filter is referenced in both wp-admin/user-new.php and wp-includes/user.php
Here’s an example of using it to make sure a newly created user has a nickname equal to the user’s first and last name:
/** * Check if the user has been created. * * @param string $login User login. * @return string (Maybe) filtered login. */ function wpdocs_check_if_user_created( $login ) { // Don't do anything to login, just see if already in database. global $wpdb, $is_new_login; $id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_login = '%s'", $login ) ); $is_new_login = ( isset( $id ) ) ? false : true; return $login; } /** * Filter the user nickname. * * @param string $nickname User nickname. * @return string (Maybe) filtered nickname. */ function wpdocs_fix_nickname ( $nickname ) { global $is_new_login; if ( $is_new_login ) { $first_name = empty( $_POST_['first_name'] ) ? sanitize_text_field( $_POST['first_name'] ) : ''; $last_name = empty( $_POST['last_name'] ) ? sanitize_text_field( $_POST['last_name'] ) : ''; $nickname = empty( $first_name ) ? '' : $first_name; $nickname .= empty( $last_name ) ? '' : ' ' . $last_name; } return $nickname; } add_filter( 'pre_user_login', 'wpdocs_check_if_user_created' ); add_filter( 'pre_user_nickname', 'wpdocs_fix_nickname' );