用户注册WooCommerce后错误的用户名和显示名称

时间:2014-07-23 13:11:45

标签: wordpress woocommerce

当人们通过WooCommerce扩展程序购买产品时,我已启用他们可以在结帐时创建帐户。我不允许他们选择自己的用户名和密码。

现在我看到WP使用emailaddress的某些部分来创建用户名,显示名称基于结帐时填写的第一个名字。

现在我想改变它:

  • 用户名必须是完整的电子邮件地址[求助];
  • 显示名称必须是名字+姓氏[UNSOLVED]。

我试过这个:显示名称与我的'没有知识' PHP:

add_filter('pre_user_display_name', 'wsis_pre_user_display_name');
function wsis_pre_user_display_name($display_name) {
    $first = get_user_field("billing_first_name"); 
    $last = get_user_field("billing_last_name"); 
    $display_name = $first . $last;

    return $display_name;
}

此过滤器在其codex中提及:http://codex.wordpress.org/Function_Reference/wp_update_user。但没有例子,我的代码也没有用。有人可以帮忙吗?

在user.php wp-includes文件夹中,我找到了过滤器,现在让它工作: - )。

/**
     * Filter a user's display name before the user is created or updated.
     *
     * @since 2.0.3
     *
     * @param string $display_name The user's display name.
     */
    $display_name = apply_filters( 'pre_user_display_name', $display_name );

    if ( empty($description) )
        $description = '';

第二次尝试做了一些事!它使显示名称完全为空:

add_filter('pre_user_display_name', 'pre_user_display_name');
function pre_user_display_name($display_name) {
    $first = get_the_author_meta('first_name'); 
    $last = get_the_author_meta('last_name'); 

    $display_name = $first . $last;

    return $display_name;
}

我是在正确的轨道上吗?

2 个答案:

答案 0 :(得分:0)

要将用户名设置为完整的电子邮件地址,您可以在主题的functions.php文件中添加以下代码。

add_filter('woocommerce_new_customer_data','change_username');

function change_username($user_data)
        {
           return array(
                      'user_login' => $user_data['user_email'],
                      'user_pass'  => $user_data['user_pass'],
                      'user_email' => $user_data['user_email'],
                      'role'       => 'customer'

                   );
        }

答案 1 :(得分:0)

以下是如何将显示名称设置为名字+姓氏。

// Sets the display name to first name and last name
add_filter( 'pre_user_display_name' , 'default_display_name' );
function default_display_name($name) {
    if ( isset( $_POST['billing_first_name'] ) ) {
        $firstname = sanitize_text_field( $_POST['billing_first_name'] );
    }
    if ( isset( $_POST['billing_last_name'] ) ) {
        $lastname = sanitize_text_field( $_POST['billing_last_name'] );
    }
    $name = $firstname . ' ' . $lastname;
    return $name;
}

来源:http://geektamin.com/blog/533/why-update_user_meta-display_name-doesnt-work-and-how-to-use-pre_user_display_name-instead/