按用户角色限制自定义帖子类型视图

时间:2013-04-23 作者:Brob

我已经创建了一个自定义帖子类型,并创建了两个自定义用户角色,希望能够根据特定角色限制帖子类型的视图。

有没有直接的方法来限制这一点?

4 个回复
SO网友:aifrim

每个角色都有能力。

这里有一个简单的贡献者:(他只是写作和编辑)

add_role(\'contributor\', \'Contributor\', array(
    \'read\' => true,
    \'edit_posts\' => true,
    \'delete_posts\' => false,
));
现在他有了新的能力(他可以编辑其他人的帖子)

function add_capability()
{
    $role = get_role(\'contributor\');
    $role->add_cap(\'edit_others_posts\');
}
add_action(\'admin_init\', \'add_capability\');
现在为我们的新岗位类型添加他的新能力。首先让我们创建帖子类型:

function create_myposttype()
{
    register_post_type(
        \'myposttype\',
        array(
            \'public\' => true,
            \'capability_type\' => \'myposttype\',
            \'capabilities\' => array(
                \'publish_posts\' => \'publish_myposttypes\',
                \'edit_posts\' => \'edit_myposttypes\',
                \'edit_others_posts\' => \'edit_others_myposttypes\',
                \'read_private_posts\' => \'read_private_myposttypes\',
                \'edit_post\' => \'edit_myposttype\',
                \'delete_post\' => \'delete_myposttype\',
                \'read_post\' => \'read_myposttype\',
            ),
        )
    );
}
add_action(\'init\', \'create_myposttype\');
已创建帖子类型,但投稿人对此没有权限。让我们给他一些果汁:

function add_capability()
{
    $role = get_role(\'contributor\');
    $role->add_cap(\'read_myposttype\');
    $role->add_cap(\'edit_myposttypes\');
    $role->add_cap(\'delete_myposttype\', false); // to be sure
}
add_action(\'admin_init\', \'add_capability\');
read\\u post和read\\u*功能确保具有指定角色的用户无法查看和访问当前区域。他会得到一般的Wordpress错误:

您没有足够的权限访问此页面

让我们的作者(默认角色)无法看到myposttype 职位:

function remove_author_capability()
{
    $role = get_role(\'author\');
    $role->add_cap(\'read_myposttype\', false);
}
add_action(\'admin_init\', \'remove_author_capability\');
请记住清理:

function add_roles_on_activation() // add roles on activation
{
    add_role(\'contributor\', \'Contributor\', array(
        \'read\' => true,
        \'edit_posts\' => true,
        \'delete_posts\' => false,
    ));
}
register_activation_hook(__FILE__, \'add_roles_on_activation\');

function add_roles_removal()  // we clean up after ourselves
{
    remove_role(\'contributor\');
}
register_deactivatin_hook(__FILE__, \'add_roles_removal\');

Now if you just want to remove stuff from the menu (making them accessible by URL anyway) here is how:

从adminbar(顶部悬停的小菜单):

function my_edit_adminbar($wp_admin_bar)
{
    if(current_user_can(\'read_myposttype\'))
        $wp_admin_bar->remove_node(\'new-myposttype\');
}
add_action(\'admin_bar_menu\', \'my_edit_adminbar\');
从菜单中:

function my_edit_menu()
{
    if(current_user_can(\'read_myposttype\'))
    {
        $slug = \'edit.php?post_type=myposttype\';
        remove_menu_page($slug);
    }
}
add_action(\'admin_menu\', \'my_edit_menu\');

SO网友:gdaniel

好我看不到代码。。。所以我不知道你是自己创建了自定义的帖子类型,还是使用了插件。我假设您在函数中创建了自定义post类型。php。在那里,您可以使用if语句来检查用户是否具有某些功能。

<?php current_user_can( $capability, $args ); ?>
如果您可以发布一些代码,那么我可以给出一个具体的示例来说明如何做到这一点,这将非常有帮助。

http://codex.wordpress.org/Function_Reference/current_user_can

SO网友:Edd Smith

首先,这里是如何获得当前用户角色的。

<?php 

// Get the current user id
$user_id = get_current_user_id(); 

// Get the user data based on this id
// returned in an arryay
$user_data = new WP_User( $user_id );


// We could echo out the first role item 
// in the array like this...   
echo $user->roles[0];


// Or we could print the full
// array like this 
print_r($user->roles);

?> 
现在,我们可以使用上述数据在模板中构造一个简单的if语句。这将取决于你试图实现的目标,但。。。

<?php 

$user_roll = $user->roles[0];
if($user_roll =="administrator") {

    // Code here will only be run if current
    // user is an admin
}
?> 
你得到了它的jist;)

SO网友:Gonzoarte

注册自定义帖子类型(CPT)时,我们使用动作挂钩init :

add_action( \'init\', \'my_custom_post_type_function\', 0 );

因此,我们需要通过两个步骤围绕这个特定的CPT注册设置一个用户角色条件:

1. 具有以字符串形式返回当前用户角色的函数

    function my_get_current_user_role() {
     $user = wp_get_current_user();
     $roles = (array)$user->roles;
     return $roles[0];
    }
2. 然后限制

    if(my_get_current_user_role() == \'administrator\'){
     add_action( \'init\', \'my_custom_post_type_function\', 0 );
    }

结束

相关推荐