我整天都在研究这个问题,还没有得出多少结果。
我想通过用户级别(或其他方式)限制谁可以查看我的自定义帖子类型。因此,如果登录的人不是“管理员”,则添加的自定义帖子类型对他们不可见。
以下是我拥有的自定义帖子类型的一部分:
add_action(\'init\', \'portfolio_register\');
function portfolio_register() {
$labels = array(
\'name\' => _x(\'Case Studies\', \'post type general name\'),
\'singular_name\' => _x(\'Case Study Item\', \'post type singular name\'),
\'add_new\' => _x(\'Add New\', \'portfolio item\'),
\'add_new_item\' => __(\'Add New Case Study Item\'),
\'edit_item\' => __(\'Edit Case Study Item\'),
\'new_item\' => __(\'New Case Study Item\'),
\'view_item\' => __(\'View Case Study Item\'),
\'search_items\' => __(\'Search Case Studies\'),
\'not_found\' => __(\'Nothing found\'),
\'not_found_in_trash\' => __(\'Nothing found in Trash\'),
\'parent_item_colon\' => \'\'
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'query_var\' => true,
/*\'menu_icon\' => get_stylesheet_directory_uri() . \'/article16.png\',*/
\'rewrite\' => true,
\'capability_type\' => \'post\',
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => array(\'title\',\'editor\',\'thumbnail\')
);
register_post_type( \'portfolio\' , $args );
}
以下是我发现的不适用于自定义帖子类型菜单删除的潜在解决方案:
function remove_menus()
{
global $menu;
global $current_user;
get_currentuserinfo();
if($current_user->user_login != \'admin\')
{
$restricted = array(__(\'Posts\'),
__(\'Media\'),
__(\'Links\'),
__(\'Pages\'),
__(\'Comments\'),
__(\'Appearance\'),
__(\'Plugins\'),
__(\'Users\'),
__(\'Tools\'),
__(\'Settings\')
);
end ($menu);
while (prev($menu)){
$value = explode(\' \',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
}// end while
}// end if
}
add_action(\'admin_menu\', \'remove_menus\');
上面的操作可以删除默认菜单项,但我无法让它删除自定义帖子类型菜单。此外,它是特定于用户名的,如果我可以向其中添加多个用户,这也没关系。
global $user_login;
get_currentuserinfo();
if (!current_user_can(\'update_plugins\')) {
.......
}
以上这些根本不起作用。
谢谢
SO网友:t31os
Codex - Register Post Type
请参见
capability_type
和
capabilities
的参数
register_post_type
.您可以通过
capabilities
参数映射到必要CAP的功能数组,下面是具有自定义功能的args数组的示例。
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'query_var\' => true,
\'rewrite\' => true,
\'capabilities\' => array(
\'publish_posts\' => \'ADD_CAP_HERE\',
\'edit_posts\' => \'ADD_CAP_HERE\',
\'edit_others_posts\' => \'ADD_CAP_HERE\',
\'delete_posts\' => \'ADD_CAP_HERE\',
\'delete_others_posts\' => \'ADD_CAP_HERE\',
\'read_private_posts\' => \'ADD_CAP_HERE\',
\'edit_post\' => \'ADD_CAP_HERE\',
\'delete_post\' => \'ADD_CAP_HERE\',
\'read_post\' => \'ADD_CAP_HERE\',
),
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => array(\'title\',\'editor\',\'thumbnail\')
);
你当然会替换
ADD_CAP_HERE
有能力。如果您想将此帖子类型限制为管理员,只需使用管理员拥有的功能,例如
manage_options
.
角色及其大写字母表(供快速参考)
http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table