WordPress SEO by Yoast: Nascondi Meta Box negli Articoli per i Non-amministratori
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?

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.

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

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

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

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');

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.

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)

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.
