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
2 Answers
Reset to default 7This 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');
}
}
}