您必须记住,每个配置文件都有自己的配置文件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运行,这取决于您。