Limitare l'accesso amministrativo a determinate pagine per determinati utenti

18 mar 2013, 15:52:16
Visualizzazioni: 24K
Voti: 7

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?

3
Commenti

Vuoi controllare l'accesso su base per utente? Cioè, non puoi utilizzare Ruoli o Capacità per farlo?

s_ha_dum s_ha_dum
18 mar 2013 16:27:49

L'accesso/visualizzazione basata su Ruoli o Capacità funzionerà!

BoBoz BoBoz
18 mar 2013 16:31:29

Dovrei sottolineare che la parte importante è che l'utente/ruolo specificato non veda determinate pagine nel back-end. In contrapposizione al non poter modificare certe pagine.

BoBoz BoBoz
18 mar 2013 16:36:56
Tutte le risposte alla domanda 2
7

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');
    }
}
18 mar 2013 18:54:19
Commenti

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

Johannes Pille Johannes Pille
18 set 2014 06:10:56

Ok, verrà fatto :)

BoBoz BoBoz
18 set 2014 20:51:33

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!

ben.kaminski ben.kaminski
13 gen 2016 21:09:32

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()".

Nishad Up Nishad Up
18 feb 2016 11:35:11

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à.

harperville harperville
25 feb 2017 23:48:24

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.

Philip Ingram Philip Ingram
15 ago 2019 22:28:25

Perché stiamo agganciandoci a parse_query? Cosa lo rende il più appropriato? Grazie

JDandChips JDandChips
13 set 2021 17:09:17
Mostra i restanti 2 commenti
1

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');
     }
    }
}
11 gen 2017 18:28:16
Commenti

Ho modificato la risposta originale per correggere la registrazione errata del callback.

Tim Tim
9 giu 2020 16:45:55