最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Restrict admin access to certain pages for certain users

programmeradmin0浏览0评论

As the title says, I'd like to restrict back-end access to certain pages for certain users.

While doing a site with 45-50 pages, I realised it would be a much better user experience if the Page menu only listed those pages which the user should be able to change/update.

I've tried the plugins below to no avail. Advanced access manager has the functionality but does not work/is buggy on 3.5.1.

Code snippet in functions.php?

As the title says, I'd like to restrict back-end access to certain pages for certain users.

While doing a site with 45-50 pages, I realised it would be a much better user experience if the Page menu only listed those pages which the user should be able to change/update.

I've tried the plugins below to no avail. Advanced access manager has the functionality but does not work/is buggy on 3.5.1.

http://wordpress/extend/plugins/advanced-access-manager http://wordpress/extend/plugins/role-scoper http://wordpress/extend/plugins/adminimize http://wordpress/extend/plugins/s2member

Code snippet in functions.php?

Share Improve this question edited Mar 18, 2013 at 15:42 BoBoz asked Mar 18, 2013 at 13:52 BoBozBoBoz 3561 gold badge5 silver badges15 bronze badges 3
  • 1 You want to control access on a per-user basis? That is, you can't use Roles or Capabilities to do it? – s_ha_dum Commented Mar 18, 2013 at 14:27
  • Access/view based on Roles or Capabilities will work! – BoBoz Commented Mar 18, 2013 at 14:31
  • I should emphasize that the importent part is for the specified user/role not to see certain pages in back-end. As opposed to not be able to edit certain pages. – BoBoz Commented Mar 18, 2013 at 14:36
Add a comment  | 

2 Answers 2

Reset to default 7

This code seems to work well for me (in functions.php):

$user_id = get_current_user_id();
if ($user_id == 2) {
    add_filter( 'parse_query', 'exclude_pages_from_admin' );
}

function exclude_pages_from_admin($query) {
    global $pagenow,$post_type;
    if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
    }
}

It won't let me comment, so I'm adding this as a new answer.

The error:

Warning: "call_user_func_array() expects parameter 1 to be a valid callback, >function 'exclude_pages_from_admin' not found or invalid function name".

... is due to the function being called only after the user_id is checked. So if you're logged in NOT as that user, the function doesn't exist, and the filter returns that error, since it is looking for the function, but can't find it.

So it should be:

add_filter( 'parse_query', 'exclude_pages_from_admin' );

function exclude_pages_from_admin($query) {
    $user_id = get_current_user_id();

    if ($user_id == 2) {
    global $pagenow,$post_type;
     if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
     }
    }
}
发布评论

评论列表(0)

  1. 暂无评论