如果用户角色为回显文本

时间:2018-03-26 作者:user2568633

我正在制作一个自定义主题。对于我的评论部分,如果用户角色是管理员,我想显示“Admin”,如果订阅服务器是“subscriber”,等等。

问题是,我将添加此代码,所有用户旁边都会显示“Admin”,即使不是Admin(我尝试过更改角色,这只是一个Admin示例):

if ( current_user_can( \'administrator\' ) ) {
    echo \'<div class="admin-tag"></div>\';
}
这是我试过的另一个,根本不起作用:

if( current_user_can( \'administrator\' ) ) {
  echo \'Admin\';
} else if ( current_user_can( \'subscriber\' ) ) {
  echo \'Subscriber\';
}

3 个回复
SO网友:phatskat

您正在传递角色名称,administrator, 到current_user_can. 正在查看the Codex page 这是支持的,但不能保证有效,通常应避免:

不鼓励将角色名称传递给current\\u user\\u can(),因为这不能保证正常工作(请参阅#22624)。

相反,您应该使用以下功能:

if ( current_user_can( \'manage_options\' ) ) {
    echo \'Admin\';
} else if ( current_user_can( \'edit_pages\' ) ) {
    echo \'Editor\';
} else if ( current_user_can( \'publish_posts\' ) ) {
    echo \'Author\';
} else if ( current_user_can( \'read\' ) ) {
    echo \'Subscriber\';
}
您可以找到功能和角色类型的列表on the Codex

Updated 这解决了在用户上循环以显示每个用户的角色的情况:

foreach ( $comment_users as $user_id ) {
    wp23234_show_user_role( $user_id );
}

function wp23234_show_user_role( $user_id ) {
    $data  = get_userdata( $user_id );
    $roles = $data->roles;

    if ( in_array( $roles, \'administrator\' ) ) {
        echo \'Administrator\';
    } else if ( in_array( $roles, \'editor\' ) ) {
        echo \'Editor\';
    } else if ( in_array( $roles, \'author\' ) ) {
        echo \'Author\';
    } else if ( in_array ( $roles, \'subscriber\' ) ) {
        echo \'Subscriber\';
    }
}

SO网友:Tom J Nowell

不建议检查用户角色。角色有能力,这是您需要对照的能力。

E、 g.如果您希望能够发布帖子的用户能够做一些事情,请使用current_user_can( \'publish_posts\' ).

如果现有功能无法映射到您正在尝试的功能,您可以添加一个,这就是您应该如何处理其他功能。

否则,您将遇到其他问题,例如,许多用户使用manage_options 作为检测用户是否为管理员的简写,但在多站点上,此功能会发生变化,并且可能无法完全实现您的期望。

但是,如果必须检查用户角色,可以这样做,但只有在init 挂钩:

$user = wp_get_current_user();
if ( in_array( \'author\', (array) $user->roles ) ) {
    //The user has the "author" role
}
请记住,角色不是层次结构,也不是用户级别。插件可以添加其他角色,并且可以通过插件更改角色的作用

SO网友:Tom J Nowell

我正在制作一个自定义主题。对于我的评论部分,如果用户角色是管理员,我想显示“Admin”,如果订阅服务器是“subscriber”,等等。

您可以在纯CSS中完成。

查看WP为注释生成的标记,您会注意到,当作者添加注释时,它会添加一个类:

enter image description here

comment-author-admin 添加到任何同时也是管理员的评论作者。这是由comment_class 函数,与body_classpost_class 功能工作

现在我们可以使用CSS和:after 选择器将单词“Admin”附加到另一个元素。

例如:

.comment.comment-author-admin cite:after {
    content: "Admin";
    margin-left: 0.5em;
    color: red;
    border: 1px solid red;
    border-radius: 6px;
    padding: 0 0.5em;
}

enter image description here

无需PHP。

至于current_user_can, 提示位于函数名中current 用户可以。又名您,站点的当前用户。它总是指你,而不是正在编写的内容的作者。相反,您需要注释作者ID。

仔细想想,如果它真的像你预期的那样工作,它会给你当前的评论用户吗?还是当前的post用户?如果该评论是由已注销的用户发表的,会发生什么情况?

结束

相关推荐

Get users that likes the post

我有一个类似ajax的帖子系统,当用户喜欢帖子时,系统会在帖子中添加一个帖子元,并将其命名为(post\\u liked\\u users)。post\\u likes\\u users元值示例:a:1:{s:6:\"user-1\";i:1;}现在,如何才能获得喜欢该帖子的用户?注意:我不能像杰克·约翰逊那样只使用foreach答案,我必须使用WP\\u User\\u Query或WP\\u Query,因为我要使用offest和number。