Roles 和capabilities 用于控制访问,通常您应该使用它们。例如,功能edit_other_posts
和edit_published_posts
需要编辑其他用户的帖子。其他类型也一样(第->edit_other_pages
, edit_published_pages
).
因为,除了限制更改其他用户帖子的权限外,您还希望它们不可见,因此您可能需要使用上述解决方案。
作用se333732_pre_get_post
用于筛选管理中的职位列表,而se333732_load_post
如果用户打开编辑页面(猜测帖子编号),但他没有访问权限,则重定向用户。
add_action( \'pre_get_posts\', \'se333732_pre_get_post\' );
add_action( \'load-post.php\', \'se333732_load_post\' );
function se333732_pre_get_post( $query )
{
if ( !is_admin() )
return;
$cfg_limited_access = se333732_roles_and_types();
if ( $query->is_main_query() && in_array($query->query_vars[\'post_type\'], $cfg_limited_access[\'post_types\']) )
{
$user = wp_get_current_user();
if ( !array_intersect( $cfg_limited_access[\'privileged_roles\'], $user->roles ) )
$query->query_vars[\'author\'] = get_current_user_id();
}
}
function se333732_load_post()
{
if ( isset($_GET[\'post\']) && (int)$_GET[\'post\'] == $_GET[\'post\'] )
{
$post_id = (int)$_GET[\'post\'];
$post = get_post( $post_id );
if ( $post )
{
$author_id = $post->post_author;
$post_type = $post->post_type;
$user = wp_get_current_user();
$cfg_limited_access = se333732_roles_and_types();
if ( $author_id != $user->ID
&& in_array( $post_type, $cfg_limited_access[\'post_types\'] )
&& !array_intersect( $cfg_limited_access[\'privileged_roles\'], $user->roles ) )
{
wp_redirect( admin_url("edit.php?post_type=$post_type") );
}
}
}
}
function se333732_roles_and_types()
{
return [
\'privileged_roles\' => [ \'editor\', \'administrator\' ],
\'post_types\' => [ \'page\', \'post\', \'shop_order\' ],
];
}