为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
月关宝盒 2023-10-21 09:56:56
我试图将用户注册时的显示名称设置为他们的名字。以下功能仅在用户登录时有效,而不是在用户首次注册时有效(如果他们注销并再次登录,则此功能生效):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;}
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我找到了解决方案 - 还有另一个钩子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;

}

经过测试并有效!


查看完整回答
反对 回复 2023-10-21
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

我找到了解决方案 - 还有另一个钩子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;

}

经过测试并有效!

以下是该函数的细分set_display_name_to_forename

  1. if ( isset( $_POST['billing_first_name'] ) ) { ... } 此条件检查 $_POST 数组中是否存在 billing_first_name 字段。此字段通常在 WooCommerce 注册表中用于收集用户的名字。

  2. if ( isset( $_POST['first_name'] ) ) { ... }如果该billing_first_name字段不存在,则此条件检查该first_name字段是否存在于$_POST数组中。标准 WordPress 注册表中使用该first_name字段来收集用户的名字。

  3. 在每个条件内,代码都会更新 $display_name 变量,sanitize_text_field()以确保清除任何潜在有害的输入。它根据存在的字段将显示名称设置为billing_first_name或的值。first_name

  4. 如果这两个字段都不存在,则默认显示名称保持不变。

  5. 最后,函数返回修改后的或原始的显示名称。

总体而言,此代码利用 WordPress 过滤系统在保存显示名称之前拦截显示名称,并动态地将其替换为用户在注册表中提供的名字。这是一种个性化显示名称并为您的 WooCommerce 注册过程创建更加用户友好的体验的巧妙方法。


查看完整回答
反对 回复 2023-10-21
  • 2 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信