Restricționarea accesului administrativ la anumite pagini pentru anumiți utilizatori
După cum spune și titlul, aș dori să restricționez accesul din backend la anumite pagini pentru anumiți utilizatori.
În timp ce lucram la un site cu 45-50 de pagini, mi-am dat seama că ar fi o experiență mult mai bună pentru utilizatori dacă meniul Pagini ar lista doar acele pagini pe care utilizatorul ar trebui să poată să le modifice/actualizeze.
Am încercat pluginurile de mai jos fără succes. Advanced Access Manager are funcționalitatea necesară dar nu funcționează/are erori pe versiunea 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
Există vreo soluție cu un snippet de cod în functions.php?

Acest cod funcționează bine pentru mine (în 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');
}
}

Acesta este un răspuns foarte bun, +1. Reține că poți accepta propriile răspunsuri ca fiind corecte...

Răspunsul lui BoBoz a funcționat excelent pentru o vreme, dar acum primesc un Avertisment: "call_user_func_array() așteaptă ca parametrul 1 să fie un callback valid, funcția 'exclude_pages_from_admin' nu a fost găsită sau numele funcției este invalid". Care ar fi cea mai bună metodă de a repara acest fragment de cod pentru a nu mai genera avertismentul? Mulțumesc!

Sunt nou în WordPress. Spuneți-mi unde se află fișierul functions.php. Este în folderul wp-includes? Dacă da, primesc eroarea "Call to undefined function add_filter()".

În prezent, utilizatorul meu are rolul de "Autor" și nu vede meniul "Pagini" în secțiunea de administrare. Nu vreau să-i cresc permisiunile mai mult decât strictul necesar pentru a-i permite accesul la trei pagini. Am introdus codul, dar utilizatorul nu are cum să acceseze paginile pentru că nu are "Pagini" în meniul din stânga. Cum aș putea face ca acel element de meniu să apară, astfel încât atunci când dă click pe el, să-și vadă cele trei pagini pe care are permisiunea să le editeze? Dacă nimic altceva, dacă aș putea afișa link-ul "Editare" pe pagina însăși, ar funcționa și asta. Dar acest fragment de cod nu oferă nici această funcționalitate.

Știu că această întrebare este veche, dar condiționalele ar trebui plasate în interiorul funcției apelate, astfel încât indiferent de situație, funcția să existe întotdeauna versus a fi nedeclarată (editare) Văd că răspunsul de mai jos explică și acest lucru.

Sistemul nu mă lasă să comentez, așa că adaug acest răspuns ca o soluție nouă.
Eroarea:
Avertisment: "call_user_func_array() se așteaptă ca parametrul 1 să fie un callback valid, funcția 'exclude_pages_from_admin' nu a fost găsită sau este un nume de funcție invalid".
... apare deoarece funcția este apelată doar după verificarea user_id. Deci dacă ești autentificat CA alt utilizator, funcția nu există, iar filtrul returnează această eroare, deoarece caută funcția dar nu o găsește.
Soluția corectă ar fi:
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');
}
}
}
