当人们通过WooCommerce扩展程序购买产品时,我已启用他们可以在结帐时创建帐户。我不允许他们选择自己的用户名和密码。
现在我看到WP使用emailaddress的某些部分来创建用户名,显示名称基于结帐时填写的第一个名字。
现在我想改变它:
我试过这个:显示名称与我的'没有知识' 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;
}
我是在正确的轨道上吗?
答案 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;
}