Restringir el acceso de administrador a ciertas páginas para ciertos usuarios
Como dice el título, me gustaría restringir el acceso del back-end a ciertas páginas para ciertos usuarios.
Mientras desarrollaba un sitio con 45-50 páginas, me di cuenta que sería una mejor experiencia de usuario si el menú de Páginas solo mostrara aquellas páginas que el usuario debería poder modificar/actualizar.
He probado los siguientes plugins sin éxito. Advanced Access Manager tiene la funcionalidad pero no funciona/tiene errores en la versión 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
¿Algún fragmento de código para functions.php?

Este código me ha funcionado bien (en functions.php):
$user_id = get_current_user_id();
if ($user_id == 2) {
add_filter( 'parse_query', 'excluir_paginas_del_admin' );
}
function excluir_paginas_del_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');
}
}

Esta es una respuesta muy buena, +1. Ten en cuenta que puedes aceptar tus propias respuestas como correctas...

La respuesta de BoBoz funcionó bien durante un tiempo, pero ahora me aparece una Advertencia: "call_user_func_array() espera que el parámetro 1 sea un callback válido, la función 'exclude_pages_from_admin' no se encuentra o el nombre de la función no es válido". ¿Cuál sería la mejor manera de arreglar este fragmento de código para que no produzca la advertencia? ¡Gracias!

Soy nuevo en WordPress. Dime dónde se encuentra el archivo functions.php. ¿Está en la carpeta wp-includes? Si es así, me aparece el error Call to undefined function add_filter().

Actualmente, mi usuario es un "Autor" y no tiene visible el menú "Páginas" en su sección de administración. No quiero aumentar sus permisos más de lo necesario para darle acceso a tres páginas. He puesto el código pero el usuario no tiene forma de acceder a las páginas porque no tienen "Páginas" en el menú izquierdo. ¿Cómo puedo hacer para mostrar ese elemento del menú para que cuando haga clic en él, pueda ver sus tres páginas que tiene permiso para editar? Si no es posible, si al menos pudiera mostrar el enlace "Editar" en la propia página, también funcionaría. Pero este fragmento de código tampoco proporciona esa funcionalidad.

Sé que esto es antiguo, pero los condicionales realmente deberían colocarse dentro de la función llamada para que, sin importar qué, la función siempre exista en lugar de quedar sin declarar (editar) Veo que la respuesta de abajo también explica esto.

No me deja comentar, así que estoy agregando esto como una nueva respuesta.
El 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".
... ocurre porque la función solo se llama después de verificar el user_id. Entonces, si no estás conectado como ese usuario, la función no existe y el filtro devuelve ese error, ya que busca la función pero no puede encontrarla.
Por lo tanto, debería ser:
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');
}
}
}
