WordPress SEO by Yoast: Nascondi Meta Box negli Articoli per i Non-amministratori

29 ott 2012, 22:21:35
Visualizzazioni: 14.1K
Voti: 10

Ho un sito multi-autore e non mi sento a mio agio nel permettere a tutti i membri di inserire i dettagli SEO negli articoli che pubblicano. Vorrei che questa opzione fosse visibile solo all'Amministratore del sito. Qualche idea?

0
Tutte le risposte alla domanda 5
4
19

Non era specificato nella documentazione API sul sito del plugin Yoast SEO quale fosse l'ID e non ho una copia di Yoast installata a disposizione, ma secondo yoas-plugin-dir/admin/class-metabox.php linea 144, il meta_box registrato è;

add_meta_box( 'wpseo_meta', ...etc ); ...

Il quale è agganciato all'hook add_meta_boxes alla linea 32 dello stesso file,

add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );

Ovviamente potresti ottenere l'ID direttamente dal meta box stesso nella schermata di modifica del post... Comunque.

Puoi fare quanto segue,

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //la capability 'activate_plugins' equivale ad amministratore, quindi se NON è un amministratore
    //nascondi il meta box a tutti gli altri ruoli per i seguenti 'post_type' 
    //come post, page, custom_post_type, ecc.
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

...dove post type è il tipo di post a cui desideri applicare questa restrizione, come post o uno o più custom post type!

Dovrebbe fare al caso tuo.

aggiornamento: manage_plugins avrebbe dovuto essere activate_plugins - corretto.

29 ott 2012 23:29:58
Commenti

+1 per yoast_is_toast().

kaiser kaiser
30 ott 2012 15:23:13

@Ahmad M grazie per il suggerimento di modifica ma la variabile $post_type e il parametro dell'argomento dell'azione non sono necessari in questo caso e non generano notice/errori. Inoltre, se includi la variabile $post_type, devi definirne il tipo di post all'interno della funzione altrove, cosa che non hai fatto, quindi l'utente avrebbe dovuto eseguire questo codice per farlo funzionare in modo improprio! In questo caso è perfettamente accettabile passare direttamente il nome del tipo di post, ad esempio 'post', nella funzione remove_meta_box. Grazie comunque per il suggerimento.

Adam Adam
30 ott 2012 18:39:59

@userabuser: Grazie per la chiarificazione, ma $post_type è già definito e pronto per essere utilizzato dalle funzioni dell'hook add_meta_boxes, per favore consulta la vista sorgente di Adam Brown di questo action hook. Utilizzare $post_type in questo caso renderà il codice indipendente dallo schermo di modifica del post_type, il che significa che rimuoverà la meta box wpseo_meta da tutti i tipi di post su cui è presente e non restituirà nulla nel caso in cui wpseo_meta non sia trovato.

Ahmad M Ahmad M
1 nov 2012 20:11:13

@AhmadM Grazie amico. Sono consapevole che la variabile sia già definita, tuttavia questo non la rende un requisito da passare all'hook/funzione. In questo caso l'OP vuole rimuovere il meta box dal post_type post ed è per questo che la soluzione iniziale permette un controllo granulare. Tuttavia, nel caso in cui si voglia rimuoverlo per tutti i post type, allora usare la variabile già definita $post_type è soddisfacente. Quello che farò è modificare la mia risposta per includere il tuo esempio aggiuntivo usando la variabile $post_type per situazioni in cui qualcuno potrebbe voler applicare questo a tutti i post type registrati.

Adam Adam
2 nov 2012 06:23:07
0

Prova a incollare questo nel file functions.php di un plugin o tema, come da plugin WordPress SEO (Documentazione API), di Yoast.

if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
    add_filter('wpseo_use_page_analysis', '__return_false');
}

Per evitare qualsiasi errore... Questo codice verifica che la funzione esista prima di tentare di nascondere gli elementi, consentendoti di disattivare il plugin senza generare errori.

Potresti aver bisogno di agganciarti a init affinché funzioni correttamente, il che può essere fatto così:

function wpse_init(){
    if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
        add_filter('wpseo_use_page_analysis', '__return_false');
    }   
}
add_action('init', 'wpse_init');
30 ott 2012 03:06:10
0

Puoi rimuoverlo utilizzando la funzione remove_meta_box.

if ( ! current_user_can( 'edit_pages' ) ) {
    add_action( 'add_meta_boxes', 'my_remove_wp_seo_meta_box', 100000 );
}

function my_remove_wp_seo_meta_box() {
    remove_meta_box( 'wpseo_meta', 'post', 'normal' );
}

Nota il valore 100000 in add_action, questo assicura che l'azione venga eseguita dopo che la metabox di WP SEO è stata collegata.

16 mar 2013 23:25:32
0

Puoi utilizzare il plugin Adminimize per nascondere elementi agli utenti in base ai loro ruoli. L'ho utilizzato personalmente per nascondere alcune funzionalità di Yoast SEO ai clienti e semplificare il backend.

http://wordpress.org/extend/plugins/adminimize/

Abbastanza semplice da usare aggiungendo i selettori CSS per gli elementi che vuoi nascondere. L'ho usato per nascondere le schede di Analisi SEO della pagina (#linkdex)

6 nov 2012 13:18:30
0

In WordPress SEO by Yoast esiste un'opzione nelle impostazioni per disabilitare la parte avanzata delle impostazioni di WordPress SEO per gli utenti non amministratori. Se desideri disabilitare completamente il box, puoi utilizzare altri plugin per rimuovere gli elementi della pagina di modifica degli articoli per gli utenti non amministratori, ad esempio rimuovendo il box di WordPress SEO dall'editor degli articoli per gli utenti non amministratori.

5 ago 2013 12:58:53