Ограничение доступа администратора к определенным страницам для определенных пользователей
Как следует из заголовка, я хотел бы ограничить доступ к определенным страницам в админ-панели для определенных пользователей.
При создании сайта с 45-50 страницами я понял, что было бы намного лучше с точки зрения пользовательского опыта, если бы в меню "Страницы" отображались только те страницы, которые пользователь может изменять/обновлять.
Я пробовал следующие плагины, но безуспешно. Advanced Access Manager имеет нужную функциональность, но не работает/содержит ошибки в версии 3.5.1.
http://wordpress.org/extend/plugins/advanced-access-manager http://wordpress.org/extend/plugins/role-scoper http://wordpress.org/extend/plugins/adminimize http://wordpress.org/extend/plugins/s2member
Может быть, есть решение через фрагмент кода в functions.php?
Этот код отлично работает у меня (в файле 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');
}
}

Это очень хороший ответ, +1. Обратите внимание, что вы можете принять свой собственный ответ как правильный...

Ответ BoBoz отлично работал какое-то время, но теперь я получаю предупреждение: "call_user_func_array() ожидает, что параметр 1 будет корректным callback-ом, функция 'exclude_pages_from_admin' не найдена или имеет недопустимое имя". Как лучше всего исправить этот фрагмент кода, чтобы он не вызывал предупреждение? Спасибо!

Я новичок в WordPress. Подскажите, где находится файл functions.php. Он находится в папке wp-includes? Если да, то я получаю ошибку Call to undefined function add_filter().

Сейчас мой пользователь имеет роль "Автор" и не видит меню "Страницы" в админ-панели. Я не хочу повышать его права больше, чем необходимо для доступа к трём страницам. Я добавил код, но пользователь не может получить доступ к страницам, так как у него нет пункта "Страницы" в левом меню. Как мне отобразить этот пункт меню, чтобы при клике он видел свои три страницы, которые ему разрешено редактировать? В крайнем случае, если бы я мог показать ссылку "Редактировать" на самой странице, это тоже сработало бы. Но данный сниппет кода не предоставляет такой функциональности.

Я знаю, что это старый вопрос, но условные операторы действительно должны быть внутри вызываемой функции, чтобы функция всегда существовала, а не была необъявленной (редактирование). Вижу, что в ответе ниже это также объясняется.

Мне не дают оставить комментарий, поэтому я добавляю это как новый ответ.
Ошибка:
Warning: "call_user_func_array() ожидает, что параметр 1 будет корректным callback-ом, функция 'exclude_pages_from_admin' не найдена или имеет недопустимое имя".
... возникает из-за того, что функция вызывается только после проверки user_id. Поэтому если вы вошли НЕ под этим пользователем, функция не существует, и фильтр возвращает эту ошибку, так как он ищет функцию, но не может её найти.
Правильный вариант:
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');
}
}
}
