我正在尝试向我的博客添加验证作者徽章,并且我已经能够使用此代码
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)它应该只显示用户的姓名,而不显示验证徽章(是否登录)。请帮助或指引我正确的方向。
谢谢
最合适的回答,由SO网友:kero 整理而成
罪魁祸首是这条线
$current_user = wp_get_current_user();
名称为“get
current 用户”建议,它将为您获取当前登录的用户。这不是您想要的。
在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_name
是
not a core filter, 因此,您可能需要为其使用其他代码,这取决于此过滤器的工作方式及其来源。