Come modificare i permessi necessari per accedere alle opzioni di un plugin?

28 lug 2014, 14:02:43
Visualizzazioni: 19.4K
Voti: 5

Ho i seguenti 3 ruoli diversi: Admin, Editor e SEO. Ho installato WordPress SEO di Yoast e voglio ottenere questo:

  • Non voglio che gli editori vedano le opzioni SEO, perché si limitano a scrivere post e non conoscono l'SEO. C'è una persona con il ruolo SEO che si occuperà dell'ottimizzazione.
  • Non voglio che la persona SEO veda le opzioni degli altri plugin. Voglio solo che abbia le stesse capacità degli Editor, ma con le funzioni SEO abilitate.

Ho provato con alcuni snippet trovati su questo sito e sono riuscito a nascondere la meta box agli Editor, ma non la piccola 'scatola di valutazione' sopra il pulsante Pubblica.

Inoltre non so come gestire il secondo punto, perché tutti i plugin utilizzano la stessa capacità manage_options, quindi non posso assegnare quella capacità al ruolo SEO. E non so come cambiare la capacità necessaria senza modificare i file del plugin (cosa che verrebbe persa con l'aggiornamento del plugin).

Grazie in anticipo.

3
Commenti

usa manage_options per SEO, quindi imposta regole per il ruolo SEO dal functions.php del tuo tema per negare l'accesso ad altre pagine di amministrazione dei plugin. Puoi reindirizzare quelle pagine a una pagina 404.

тнє Sufi тнє Sufi
28 lug 2014 15:45:12

Potrebbe essere una soluzione @тнєSufi. Stavo ricercando su come nascondere le opzioni del menu con remove_menu_page, e ho ottenuto alcuni risultati. So che non previene l'accesso ma questa volta è una cosa visiva.

Elías Gómez Elías Gómez
29 lug 2014 16:58:24

sì, non previene. Ma puoi reindirizzare quelle pagine a una pagina 404, così chiunque con il ruolo SEO che cerca di accedere a quelle pagine tramite URL diretto vedrà una pagina 404.

тнє Sufi тнє Sufi
29 lug 2014 21:19:13
Tutte le risposte alla domanda 3
2

Forse questo non è il metodo migliore perché concede effettivamente all'editor l'accesso a Impostazioni e Opzioni, ma ciò che fa è concedere a un editor specifico (basato sull'ID utente) i permessi per modificare le opzioni. Successivamente verifichiamo se stiamo caricando uno dei template delle opzioni, se è così E l'ID utente corrisponde a quello a cui abbiamo concesso i permessi, interrompiamo il processo e mostriamo un messaggio.

1) Per prima cosa, crea il tuo utente SEO e assegnagli il ruolo di Editor.

2) Successivamente dobbiamo dare a questo utente la capacità di manage_options. Puoi trovare questo parametro modificando l'utente e guardando l'URL, dovrebbe essere uno degli ultimi parametri nell'URL.

/** Concedi i permessi al nostro SEO **/
function give_seo_yoastToast() {
    $user = new WP_User( $seo_user_id );
    $user->add_cap( 'manage_options');
}
add_action( 'admin_init', 'give_seo_yoastToast');

3) Ora dobbiamo assicurarci che il nostro esperto SEO non possa accedere a nessuna delle opzioni critiche. Per quanto ne so, le pagine elencate di seguito sono l'unico modo in cui questo utente può modificare informazioni cruciali. SE tentano di visualizzare queste pagine, interrompiamo il processo e mostriamo un messaggio, sentiti libero di modificare il messaggio.

/** Rimuovi l'accesso a determinate pagine **/
add_action( 'load-options-general.php', 'prevent_seoguy_access' );
add_action( 'load-options-writing.php', 'prevent_seoguy_access' );
add_action( 'load-options-reading.php', 'prevent_seoguy_access' );
add_action( 'load-options-discussion.php', 'prevent_seoguy_access' );
add_action( 'load-options-media.php', 'prevent_seoguy_access' );
add_action( 'load-options-permalink.php', 'prevent_seoguy_access' );
add_action( 'load-options.php', 'prevent_seoguy_access' );
function prevent_seoguy_access(){
    $currID = is_user_logged_in() ? get_current_user_id() : 0;

    if($currID == $seo_user_id ){
        wp_die("C'era un buco qui una volta, ora non c'è più.");
        exit();
    }
}

4) Al momento, può vedere le pagine nel menu ma quando tenta di accedervi vede il messaggio sopra. Come ulteriore passo, rimuoviamo effettivamente questa pagina dal nostro menu. Tieni presente che se rimuovi la pagina del menu senza la funzione sopra, un utente esperto potrebbe accedere a una qualsiasi delle pagine delle opzioni direttamente tramite URL.

/** Rimuovi la pagina Impostazioni dal menu per l'utente SEO **/
function seo_guy_menu() {
    if(!current_user_can('administrator')){
        remove_menu_page('options-general.php');
    }
}
add_action('admin_menu', 'seo_guy_menu');

5) E hai finito!

Sfortunatamente, come hai sottolineato nella tua domanda, Yoast sembra non avere una capacità per concedere a un utente permessi specifici per tutte le funzioni SEO senza dargli anche permessi extra non necessari, il che è un peccato. E come nota a margine, invece di utilizzare un $seo_user_id statico, potresti creare un Ruolo SEO, assegnare a quel ruolo i permessi di editor insieme a quelli sopra. È un po' più di lavoro (non troppo però), ma se hai un solo esperto SEO per sempre, allora il metodo sopra va bene.

28 lug 2014 18:10:48
Commenti

Grazie per il punto 3. Non ne ho bisogno al momento ma potrebbe tornare utile in futuro. Sono riuscito a nascondere il 'rating box' con una funzione condizionale e CSS. È solo un problema visivo, quindi funziona.

Elías Gómez Elías Gómez
29 lug 2014 17:04:38

Nota che WP_User->add_cap scriverà sul database, quindi crea solo un inutile sovraccarico avere questo hook su admin_init in: add_action( 'admin_init', 'give_seo_yoastToast');

Invece il Codex raccomanda di eseguirlo durante l'attivazione del tema/plugin. Ad esempio:

add_action("after_switch_theme", "your_add_cap_function");

e

add_action('switch_theme', 'your_remove_cap_function');

Oppure eseguirlo una volta e disabilitare il codice.

Pim Schaaf Pim Schaaf
4 dic 2015 15:57:24
3

Il modo migliore per modificare il capability richiesto agli utenti per visualizzare le pagine delle impostazioni di Yoast SEO è utilizzare il filtro wpseo_manage_options_capability.

Ecco un esempio di come utilizzarlo (da inserire nel file functions.php):

/**
 * Restituisce il capability necessario agli utenti per visualizzare le pagine delle impostazioni di Yoast SEO.
 *
 * @return mixed|void
 */
function my_custom_wpseo_manage_options_capability() {

    $manage_options_cap = 'edit_others_posts';

    return $manage_options_cap;
}
add_filter( 'wpseo_manage_options_capability', 'my_custom_wpseo_manage_options_capability' );

Nell'esempio sopra, viene utilizzato il capability edit_others_posts in modo che (in un'installazione predefinita di WordPress) sia gli Editor che gli Amministratori possano accedere alle impostazioni di Yoast SEO.

Nel caso in cui non si desideri che gli Editor "normali" abbiano accesso, sarà necessario creare un nuovo ruolo (ad esempio 'SEO') che abbia le stesse capability di un Editor, più un'ulteriore capability personalizzata (ad esempio manage_wpseo_options) che può essere utilizzata nella funzione sopra al posto di edit_others_posts.

Il plugin Members di Justin Tadlock permette di creare facilmente nuovi ruoli e capability per questo scopo.

Nota: Questo potrebbe non funzionare su Multisite a causa di questo problema.


Aggiornamento: Nelle versioni Yoast SEO v5.5+, il filtro wpseo_manage_options_capability è stato rinominato in wpseo_manage_options.

13 set 2016 17:35:07
Commenti

cosa fa la parte @return mixed|void ??

Mau Mau
14 ago 2017 05:12:34

Il tag @return viene utilizzato per documentare il valore di ritorno di funzioni o metodi quando si utilizza phpDocumentor. @return mixed|void significa semplicemente che il valore restituito dalla funzione potrebbe essere di qualsiasi tipo, oppure void (cioè non restituisce alcun valore).

Matt Sims Matt Sims
14 ago 2017 11:53:02

Questa dovrebbe essere la risposta scelta.

Matthew Clark Matthew Clark
14 set 2017 16:53:07
0

Ho appena trovato una soluzione molto semplice. Se non l'hai già fatto, installa un plugin per la gestione delle capability. Poi, crea una nuova capability dal gestore delle capability - chiamala "CUSTOM_CAPABILITY_NAME" o come preferisci. Quindi assegnarla a un ruolo o utente specifico.

Importante: copia e fai un backup di ogni file che intendi modificare nel caso in cui tu faccia un errore, così potrai sempre ripristinare l'originale.

Poi, sul server effettivo, devi spostarti nella directory wp-content/plugins/ e usare grep per trovare tutti i file che contengono 'manage_options'.

Esempio: grep 'manage_options' */*

La parte complicata è individuare la funzione principale che aggiunge il menu o il sottomenu alla dashboard. Ecco i miei due esempi per l'accesso specifico a Yoast SEO.

$manage_options_cap = apply_filters( 'wpseo_manage_options_capability', 'CUSTOM_CAPABILITY_NAME' );


add_submenu_page( 'wpseo_dashboard', __( 'Impostazioni WooCommerce SEO', 'yoast-woo-seo' ), __( 'WooCommerce SEO', 'yoast-woo-seo' ), 'CUSTOM_CAPABILITY_NAME', $this->short_name, array(

PS - non modificare nulla che inizi con '$' - è una variabile. :)

9 apr 2016 01:57:15