WordPress SEO di Yoast: nascondi Meta Box nei post per i non amministratori


Risposte:


19

Nei documenti API sul sito del plug-in Yoast SEO non IDera indicato quale fosse e non ho una copia di Yoast a disposizione, ma secondo la yoas-plugin-dir/admin/class-metabox.phpriga 144, il meta_box registrato è;

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

Che è collegato add_meta_boxesall'hook sulla linea 32 dello stesso file,

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

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

Puoi fare quanto segue,

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //capability of 'manage_plugins' equals admin, therefore if NOT administrator
    //hide the meta box from all other roles on the following 'post_type' 
    //such as post, page, custom_post_type, etc
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

... dove tipo di post è il tipo di post che si desidera applicare anche questa limitazione, come posto un tipo di post personalizzato uno o più!

Dovrebbe fare il trucco.

aggiornamento: manage_pluginsavrebbe dovuto essere activate_plugins- ammended.


16
+1 per yoast_is_toast().
Kaiser

@Ahmad M grazie per la modifica suggerita, ma il $post_typeparametro var e action topic non è richiesto in questa istanza e non genera avviso / errore. Inoltre se includi $post_typevar devi definire il tipo di post all'interno della funzione altrove che non hai fatto, quindi l'utente avrebbe eseguito questo per farlo funzionare in modo errato! In questo caso è perfettamente accettabile passare il nome del tipo di post, ovvero 'post'direttamente nella remove_meta_boxfunzione. Grazie comunque per il suggerimento.
Adam,

@userabuser: Grazie per il chiarimento, ma $post_typeè già definito e pronto per essere utilizzato dalle add_meta_boxesfunzioni di hook di azione, si prega di consultare Adam Brown come vista di questo hook di azione. L'utilizzo $post_typein questo caso renderà il codice indipendente dalla post_typeschermata di modifica, il che significa che rimuoverà la wpseo_metameta-box da tutti i tipi di post su cui si trova e non restituirà nulla nel caso in cui wpseo_metanon venga trovato.
Ahmad M

@AhmadM Grazie amico. Sono consapevole del fatto che il var è già stato definito, tuttavia ciò non lo rende un requisito necessario per passare all'hook / funzione. In questo caso l'OP vuole rimuovere la meta box dal postpost_type, motivo per cui la soluzione iniziale consentirà un controllo granulare. Tuttavia, nel caso in cui si desidera rimuoverlo per tutti i tipi di post, l'utilizzo della var già definita $post_typeè soddisfacente. Quello che farò è modificare la mia risposta per includere il tuo esempio aggiuntivo usando la $post_typevariabile per le situazioni in cui qualcuno potrebbe voler applicare questo a tutti i post_types registrati.
Adam,

5

Prova a incollarlo in un plug-in o in un functions.phpfile di temi , come per il plug-in SEO di WordPress ( Documenti API ), di Yoast .

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

Per evitare errori ... Questo controlla per accertarsi che la funzione esista, prima di tentare di nascondere cose, consentendo di disattivare il plugin e non generare errori.

Potrebbe essere necessario collegarsi initaffinché funzioni correttamente, cosa che potrebbe essere fatta in questo modo:

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

4

Puoi rimuoverlo usando 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' );
}

Notare il 100000 in add_action, questo si assicura che ciò avvenga dopo che il metabox WP SEO è stato collegato.


2

È possibile utilizzare il plug-in Adminimize per nascondere gli elementi agli utenti in base al loro ruolo. L'ho usato io stesso per nascondere alcune cose Yoast SEO dai clienti e semplificare il back-end.

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

Abbastanza semplice da usare aggiungendo i selettori CSS per gli elementi che si desidera nascondere. L'ho usato per nascondere le schede Analisi Pagina SEO (#linkdex)


0

Bene, c'è un'opzione di impostazione su SEO per WordPress di Yoast per disabilitare la parte avanzata delle impostazioni SEO di WordPress per i non amministratori. Se si desidera disabilitare completamente la casella, è possibile utilizzare altri plug-in per rimuovere gli elementi della pagina dell'editor di post per i non amministratori, ad esempio rimuovendo la casella SEO di WordPress dall'editor di post per i non amministratori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.