2012-02-17 122 views

回答

7

使用admin_head挂钩的问题在于,它不适用于不使用管理系统的用户。另外,我尝试实现Marty发布的解决方案失败了,因为它似乎并不能通过update_user_meta()更新display_name - 必须使用wp_update_user()。

我的建议 - 把这个在您的functions.php文件:

function force_pretty_displaynames($user_login, $user) { 

    $outcome = trim(get_user_meta($user->ID, 'first_name', true) . " " . get_user_meta($user->ID, 'last_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 3.4.1),该工程确定,只要他们登录替换显示名称

-2

快速和肮脏的劈将是编辑文件 'WP-包括/ user.php的' 编辑如下因素

if (empty($display_name)) 
    $display_name = $user_login; 
    $display_name = apply_filters('pre_user_display_name', $display_name); 

编辑这一行

$display_name = $user_login; 

更改为:

$display_name = $first_name . ' ' . $last_name; 

上述解决方案应该可以工作,假设user.php文件在WordPress upd吃或alternativly你可以添加这样的事情你的functions.php

//force display-name of users to Firstname Lastname 
add_action('admin_head','force_pretty_displaynames'); 
function force_pretty_displaynames() { 
    $current_user = wp_get_current_user(); 
    if ($current_user->display_name != $current_user->first_name." ".$current_user->last_name){ 
     update_user_meta($current_user->ID, 'display_name', $current_user->first_name." ".$current_user->last_name); 
    } 

} 

但agian在这上面可以添加一些检查,以查看用户是否登录,是管理员,贡献者etc..etc ..

但应该做你找什么..

来源:http://wordpress.org/support/topic/change-default-display-name-1

马蒂

+0

实际上可以我可以用下面的代码来做到这一点:\t \t \t \t $ USER_ID = $ current_user-> ID; \t \t \t \t $ loginfullname = $ current_user-> user_firstname。'  '。$ current_user-> user_lastname; (数组('ID'=> $ user_id,'display_name'=> $ loginfullname)); – uknowit2 2012-04-11 09:55:32

+1

永远不要编辑核心或插件文件。使用钩子(或覆盖)就像马蒂的第二个建议。 – ljelewis 2015-08-18 10:06:31

0
<?php 

//Sets the user's display name (always) to first name last name, when it's avail. 
add_action ('admin_head','make_display_name_f_name_last_name'); 
function make_display_name_f_name_last_name(){ 

    $users = get_users(array('fields'=>'all')); 

    foreach($users as $user){ 
     $user = get_userdata($user->ID);  

     $display_name = $user->first_name . " " . $user->last_name; 

     if($display_name!=' ') wp_update_user(array ('ID' => $user->ID, 'display_name' => $display_name)); 
      else wp_update_user(array ('ID' => $user->ID, 'display_name' => $user->display_login)); 

     if($user->display_name == '') 
      wp_update_user(array ('ID' => $user->ID, 'display_name' => $user->display_login)); 
    } 
} 

?> 
+0

谢谢@aubreypwd这就是我所需要的。我已经通过CSV导入了一大批用户,并且需要将每个人的display_name更改为他们的名字和姓氏。所以我在functions.php和voila中运行过这个函数,一切都完成了! :D再次感谢!对于未来的用户,我打算使用另一个脚本来强制display_name作为名和姓。 – 2016-09-10 18:59:49

+0

-1为admin_head上的所有用户执行此操作是一个非常糟糕的主意,除非您计划永远不会有几个用户。我发现这个确切的代码在我刚刚继承的网站上使用。管理员页面花了差不多1分钟时间才能加载2000个用户。当上面的add_action被注释掉时,超过500万个PHP调用被消除。现在管理页面立即加载。 – BillK 2016-10-20 03:52:12

3

一个老问题,但我的答案可能对别人有用。

运行数据库此查询(调整表名,如果您有其他前缀):

UPDATE wp_users SET display_name = CONCAT((SELECT meta_value FROM wp_usermeta WHERE meta_key = 'first_name' AND user_id = ID), ' ', (SELECT meta_value FROM wp_usermeta WHERE meta_key = 'last_name' AND user_id = ID));

在WP 3.3.1,但应该在以后的版本工作。

9

这里的richplane的回答的改进版本,在WordPress的新版本作品(3.8+):

/** 
* Format WordPress User's "Display Name" to Full Name on Login 
* ------------------------------------------------------------------------------ 
*/ 

add_action('wp_login', 'wpse_9326315_format_user_display_name_on_login'); 

function wpse_9326315_format_user_display_name_on_login($username) { 
    $user = get_user_by('login', $username); 

    $first_name = get_user_meta($user->ID, 'first_name', true); 
    $last_name = get_user_meta($user->ID, 'last_name', true); 

    $full_name = trim($first_name . ' ' . $last_name); 

    if (! empty($full_name) && ($user->data->display_name != $full_name)) { 
     $userdata = array(
      'ID' => $user->ID, 
      'display_name' => $full_name, 
     ); 

     wp_update_user($userdata); 
    } 
}