WooCommerce-在用户注册时将显示名称设置为名字

时间:2020-08-20 11:14:32

标签: php woocommerce

我正在尝试将注册时用户的显示名称设置为他们的名字。

以下功能有效,但仅在用户登录时有效,而不在用户首次注册时有效(如果他们注销并再次登录,则此功能生效):

function force_pretty_displaynames($user_login, $user) {

    $outcome = trim(get_user_meta($user->ID, 'first_name', true));
    if (!empty($outcome) && ($user->data->display_name!=$outcome)) {
        wp_update_user( array ('ID' => $user->ID, 'display_name' => $outcome));    
    }
}
add_action('wp_login','force_pretty_displaynames',10,2); 

如果将钩子从wp_login更改为user_register,则由于参数太少而产生错误:

function force_pretty_displaynames($user_login, $user) {

    $outcome = trim(get_user_meta($user->ID, 'first_name', true));
    if (!empty($outcome) && ($user->data->display_name!=$outcome)) {
        wp_update_user( array ('ID' => $user->ID, 'display_name' => $outcome));    
    }
}
add_action('user_register','force_pretty_displaynames',10,2); 

因此,如果我按如下所示删除其中一个参数,则它不会出错,但也不起作用:

function force_pretty_displaynames($user) {

    $outcome = trim(get_user_meta($user->ID, 'first_name', true));
    if (!empty($outcome) && ($user->data->display_name!=$outcome)) {
        wp_update_user( array ('ID' => $user->ID, 'display_name' => $outcome));    
    }
}
add_action('user_register','force_pretty_displaynames',10,2); 

如何在注册时将显示名称设置为名字?

我有this function可以在注册时将用户名设置为完整的电子邮件地址,我可以通过某种方式将其添加到其中吗?

add_filter( 'pre_user_login' , 'cfw_set_username_to_email' );

function cfw_set_username_to_email( $user_login ) {

    if( isset($_POST['billing_email'] ) ) {
        $user_login = $_POST['billing_email'];
    }
    if( isset($_POST['email'] ) ) {
        $user_login = $_POST['email'];
    }
    return $user_login;
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案-另一个钩子pre_user_display_name确实可以满足我的需要,它使用的功能与我已经为pre_user_login拥有的功能类似

add_filter( 'pre_user_display_name' , 'cfw_set_display_name_to_forename' );

function cfw_set_display_name_to_forename( $display_name ) {

    if( isset($_POST['billing_first_name'] ) ) {
        $display_name = $_POST['billing_first_name'];
    }
    if( isset($_POST['first_name'] ) ) {
        $display_name = $_POST['first_name'];
    }
    return $display_name;
}

经过测试,可以正常工作!

相关问题