默认情况下,在 WordPress 评论中,对于登录用户发表的评论,会使用“公开显示为”(display_name)字段的值作为用户的显示名称。如果用户不能修改/或者没有修改这个“公开显示p L | ( $ \为”选项,就会显示用户的登录名(user_login)。
如果我们希望强制采用“昵称 nickname”作为评论作者的用户名称,该怎么办呢?下面我们将9 s Z 3 e m + n分析思路详细说一下,想直n 6 c s Z接用代码的就看最后的代码片段即可。
通过检查发现,评论作者的名字和链接@ x u部分是通过 get_comment_author_link()函数输出的,代码如下:@ 9 @ a Y M @ t
- funcS 5 * D . L / ~tion get_comment_authop Y . b @ kr_link( $comment~ / X ^ $_ID = 0 ) {
- $8 W ; : p acomment = get_comment( $comment_ID );
- $url = get_coq B : s : ` )mment_` % v x D : Jauthor_url( $comment )d y R q : O;
- $Y F u 1 , I `author = get_co0 e y e u = Y xmment_author( $comment );
- if ( empty( $url ) || 'http://' == $url ) {
- $return = $author;
- } else {
- $return = "<a href='https://www.22vd.com/$url' rel='external noD - ~ I X _ ` Yfollow ugc' class='url'>$author</a>";
- }
- /**
- * Filters the comment author's link for display.
- *
- * @since 1.5L n L.0
- * @since 4.1.0 The `$author` and `$comment_ID` paw g U [ z % K k Arameters were added.
- *
- * @param string $return The HTML-formatted comment author link~ r Q : A.
- * Empty for an invalid URL.
- * @param string $author The comment author's username.
- * @\ ` Zparam int $comment_ID The comment ID.
- */
- return apply_filters( '( Q h Fget_comment_author_li& 0 e *nk', $re8 P - . Gturn, $author, $comment->comment_ID );
- }
在代码的第 4Q - 5 G W f M Y 行,我们可以看到 $author = geD 4 Bt_comment_author( $comment );来获取评A H D论作者名称,接着看 geS R A R p zt_comment_author() 函数的代码:
- function( U 0 w E 4 ; Q get_comment_^ ( 9 ! yauthor( $comment_ID = 0 ) {
- $comment = get_comment( $commeng c z J n : yt_ID );
- if ( empty( $comment->comment_author ) ) {
- $user = $comment->user_id ? get_userdata( $comment->user_id ) : false;
- if ( $user ) {
- $author = $user->display_name;
- } else {
- $author =q ) 1 __V 4 s ! l v T w0; 'Anonymous' );
- }
- } else {
- $auL c m ; Z Ythor = $comme; y t V ` Ont->comment_author;
- }
- /**
- * Filters the returned comment author name.
- *
- * @since 1.5.0
- * @since 4.1.0 The `$comm6 a =ent_ID` and `$comment` parameters were added.
- *
- * @param string $author The comment author's username.
- * @param iK 0 l O `nt $comment_ID The comment ID.
- * @param WPb 7 Y A % B_Comment $comment The comment object.
- */
- return apply_filters( 'get_comment_author', $autha 1 n r zor, $comment->com/ \ + h # Qment_ID, $comment );
- }
在代码的第 7 行,可以看到调用的是 display_name (即“公开显示为”)然后底部有一个钩子:
- apply_filterb 1 Ss( 'get_comment_( 7 8 H / ? C 7author', $author, $comment->comment_ID, $comment );
我们下来要做的,就是通过r A 4 r钩子去修改为昵称。将下面的代码添加到主题的 functions.php 文件或你的插件文件中,就u u Y . g E D {可以达到目的:
- /**
- * 将评论作者名称显示为昵称
- */
- function wpkj_get_comment_author_$ ; H w gfilter( $au* K k w e {thor, $comment_ID, $com$ Z & 9 ; 6 = kment ){
- $user = $comC ` o Y d 7 kment->user_id ? get_userdata( $comment->user_id ) : false;
- if ( $user )g u T `; {
- $author = $use- N Tr->nickname;
- } else } N p h3;
- $author = __( 'Anonymous' );
- }
- return/ w t m m ^ e 9 K $autz H v 9 v v y Vhor;
- }
- add_filter( 'get_comment_author', 'wpkj_get_comment_author_filter', 10, 3 J 3 / 5 T : A041;;
当然了,如果用户没有设置过昵称,那W # :还是会显示用户的登录名哦。