如何根据用户角色更新博客文章上的作者显示名称

时间:2018-12-07 作者:Kolawole Emmanuel Izzy

我正在尝试向我的博客添加验证作者徽章,并且我已经能够使用此代码

function add_verification_bagdge_to_authors($current_user) {
  global $post;
  $current_user = wp_get_current_user();

  $admin_role = in_array( \'administrator\', (array) $current_user->roles );
  $verifed_author = in_array( \'verified_author\', (array) $current_user->roles );

  $tnt_first_name = $current_user->first_name;
  $display_name = $current_user->display_name;
  $tnt_last_name = $current_user->last_name;
  $combine_names = $tnt_first_name.\' \'.$tnt_last_name;


  if ( $admin_role && $current_user->ID == $post->post_author ) { 
    $verify_ico = $combine_names .\' \'. \'<i title="This is a Verified Author" class="userfnt-accept"></i>\';
  } elseif ( $verifed_author && $current_user->ID == $post->post_author ) { 
    $verify_ico = $combine_names .\' \'. \'<i title="This is a Verified Author" class="userfnt-accept"></i>\';
  }else {
    $verify_ico = $display_name;
  }
  return $verify_ico;
}
add_filter( \'the_author\', \'add_verification_bagdge_to_authors\' );
add_filter( \'get_the_author_display_name\', \'add_verification_bagdge_to_authors\' );
其思想是,所有管理员和角色(已验证的作者)的用户都会自动验证,我使用add_role() function 也得到了很好的验证。

但使用上述代码,名称会随徽章更新,但如果我以管理员身份登录,则所有帖子都会将作者名称作为管理员名称,并带有验证徽章,当以验证作者身份登录时,所有帖子都会将作者名称作为验证作者,如果注销,则会使用else语句,并且所有帖子上都不会显示作者名称。

我想要实现的是;

如果是管理员(已登录或未登录),则管理员的所有帖子都应包含作者姓名,并带有经过验证的徽章/图标。

如果用户具有已验证的作者角色(已登录或未登录),则该作者的所有帖子都应带有已验证的徽章/图标。

  • 否则(1和2)它应该只显示用户的姓名,而不显示验证徽章(是否登录)。

    请帮助或指引我正确的方向。

    谢谢

  • 1 个回复
    最合适的回答,由SO网友:kero 整理而成

    罪魁祸首是这条线

    $current_user = wp_get_current_user();
    
    名称为“getcurrent 用户”建议,它将为您获取当前登录的用户。这不是您想要的。

    the_author 过滤器,您可以使用全局$authordata 变量,作为调用筛选器的函数relies on it as well.

    function add_verification_bagdge_to_authors($display_name) {
        global $authordata;
    
        if (!is_object($authordata))
            return $display_name;
    
        $icon_roles = [
            \'administrator\',
            \'verified_author\',
        ];
    
        $found_role = false;
        foreach ($authordata->roles as $role) {
            if (in_array(strtolower($role), $icon_roles)) {
                $found_role = true;
                break;
            }
        }
    
        if (!$found_role)
            return $display_name;
    
        $result = sprintf(\'%s <i title="%s" class="userfnt-accept"></i>\',
            $display_name,
            __(\'This is a Verified Author\', \'plugin_or_theme_lang_slug\')
        );
    
        return $result;
    }
    add_filter( \'the_author\', \'add_verification_bagdge_to_authors\' );
    
    get_the_author_display_namenot a core filter, 因此,您可能需要为其使用其他代码,这取决于此过滤器的工作方式及其来源。

    相关推荐

    Get_Author_Posts_url()不起作用

    全部在单个中。php文件位于Genesis子主题中。我有一个echo 属于divs 在这两者之间,我在anchors 我正在尝试通过variable, 像这样:function my_function() { $author = get_the_author_meta( $post->post_author ); $author_link = get_author_posts_url($author); $author_avatar = ge