Limitare l'accesso amministrativo a determinate pagine per determinati utenti
Come dice il titolo, vorrei limitare l'accesso back-end a determinate pagine per determinati utenti.
Durante la realizzazione di un sito con 45-50 pagine, mi sono reso conto che sarebbe una migliore esperienza utente se il menu Pagine elencasse solo quelle pagine che l'utente dovrebbe essere in grado di modificare/aggiornare.
Ho provato i plugin qui sotto senza successo. Advanced Access Manager ha la funzionalità ma non funziona/è difettoso sulla versione 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
Snippet di codice in functions.php?

Questo codice funziona bene nel mio caso (in functions.php):
$user_id = get_current_user_id();
if ($user_id == 2) {
add_filter( 'parse_query', 'escludi_pagine_da_admin' );
}
function escludi_pagine_da_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');
}
}

Questa è davvero una bella risposta, +1. Nota che puoi accettare la tua stessa risposta come corretta...

La risposta di BoBoz ha funzionato bene per un po', ora ricevo un Warning: "call_user_func_array() expects parameter 1 to be a valid callback, function 'exclude_pages_from_admin' not found or invalid function name". Qual sarebbe il modo migliore per sistemare questo codice snippet in modo che non produca il warning? Grazie!

Sono nuovo in WordPress. Fatemi sapere dove si trova il file functions.php. Si trova nella cartella wp-includes? Se è così, ottengo l'errore "Call to undefined function add_filter()".

Attualmente il mio utente è un "Autore" e non ha il menu "Pagine" visibile nella sua sezione di amministrazione. Non voglio aumentare le sue autorizzazioni più del necessario per dargli accesso a tre pagine. Ho inserito il codice, ma l'utente non ha modo di accedere alle pagine perché non ha "Pagine" nel menu di sinistra. Come posso fare per mostrare quella voce di menu in modo che quando ci clicca, possa vedere le tre pagine che gli è permesso modificare? In alternativa, se potessi mostrare il link "Modifica" sulla pagina stessa, andrebbe bene anche quello. Ma questo snippet di codice non fornisce neanche questa funzionalità.

So che è vecchio, ma i condizionali dovrebbero essere posizionati all'interno della funzione chiamata in modo che, indipendentemente da tutto, la funzione esista sempre invece di essere non dichiarata (modifica) Vedo che la risposta sotto spiega anche questo.

Non riesco a commentare, quindi aggiungo questa come nuova risposta.
L'errore:
Warning: "call_user_func_array() expects parameter 1 to be a valid callback, >function 'exclude_pages_from_admin' not found or invalid function name".
... è causato dal fatto che la funzione viene chiamata solo dopo il controllo dell'user_id. Quindi se non sei loggato come quell'utente, la funzione non esiste e il filtro restituisce quell'errore, poiché cerca la funzione ma non la trova.
Quindi dovrebbe essere:
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');
}
}
}
