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); 

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


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


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;

}


月关宝盒
浏览 70回答 2
2回答

不负相思意

我找到了解决方案 - 还有另一个钩子pre_user_display_name可以完全满足我的需要,使用与我已有的函数类似的函数pre_user_loginadd_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;}经过测试并有效!

收到一只叮咚

我找到了解决方案 - 还有另一个钩子pre_user_display_name可以完全满足我的需要,使用与我已有的函数类似的函数pre_user_loginadd_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;}经过测试并有效!以下是该函数的细分set_display_name_to_forename:if ( isset( $_POST['billing_first_name'] ) ) { ... } 此条件检查 $_POST 数组中是否存在 billing_first_name 字段。此字段通常在 WooCommerce 注册表中用于收集用户的名字。if ( isset( $_POST['first_name'] ) ) { ... }如果该billing_first_name字段不存在,则此条件检查该first_name字段是否存在于$_POST数组中。标准 WordPress 注册表中使用该first_name字段来收集用户的名字。在每个条件内,代码都会更新 $display_name 变量,sanitize_text_field()以确保清除任何潜在有害的输入。它根据存在的字段将显示名称设置为billing_first_name或的值。first_name如果这两个字段都不存在,则默认显示名称保持不变。最后,函数返回修改后的或原始的显示名称。总体而言,此代码利用 WordPress 过滤系统在保存显示名称之前拦截显示名称,并动态地将其替换为用户在注册表中提供的名字。这是一种个性化显示名称并为您的 WooCommerce 注册过程创建更加用户友好的体验的巧妙方法。
打开App,查看更多内容
随时随地看视频慕课网APP