您必须记住,每个配置文件都有自己的配置文件display_name
设置,并且为了强制执行它,您可以钩住pre_user_display_name
过滤器,使您有机会在更新或插入用户之前对其进行更改。然而不幸的是,pre_user_display_name
除此之外,不传递任何信息display_name
通常是user_login
. 你甚至不能用static
函数中要等待的数据pre_user_first_name
和pre_user_last_name
因为他们只是在display_name
.
从你发布的代码中可以看到(http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/comment-template.php#L23)如果comment_author
列为空,则user
通过获取get_userdata()
(随user_id
属性),它通过数据库查询生成用户数据。
据我所知,您希望避免额外的查询(尤其是如果get_userdata()
必须签发才能获得$author
), 所以comment_author
的属性$comment
(由get_comment()
调用)应已包含格式良好的显示名称,以避免任何进一步的查询。
因此comment_author
必须从存储注释的那一刻起,以所需的格式将其自身存储到数据库中。
wp_new_comment()
http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/comment.php#L1302 是一个开始寻找的好地方wp-comments-post.php
只要你发表评论。
你首先看到的是preprocess_comment
筛选应用程序,以便您可以更改comment_author
立即将更改后的版本存储在数据库中。
你有你的user_ID
, 您可以使用它为用户获取数据并相应地更改名称。避免user_ID
, 但是,您可以尝试使用global $current_user
, 它已经被用户元数据预先水合。
下面是一个简单的概念证明:
function wpse31694_alter_comment_author( $commentdata ) {
global $current_user;
$commentdata[\'comment_author\'] = $current_user->user_firstname.\' \'.$current_user->user_lastname;
return $commentdata;
}
add_filter( \'preprocess_comment\', \'wpse31694_alter_comment_author\' );
为了改变
comment_author
以前输入的数据,其中包含用户名而不是所需的表单,您可以安排一个简单的
Cron 因为在深夜,它会逐一浏览每一条评论,并改变
comment_author
形成所需的一个。此外,您还可以
wp_update_user()
并切换
display_name
通过相同的Cron运行,这取决于您。