SEO WordPress par Yoast: Masquer les méta-boîtes dans les messages pour les non-administrateurs

9

J'ai un site Web multi-auteur et je ne suis pas très à l'aise pour permettre à tous les membres d'entrer des détails SEO dans les articles qu'ils publient. J'aimerais que cela ne soit visible que par l'administrateur du site Web. Des idées?

Audrius
la source

Réponses:

19

Il n'a pas dit dans les documents API sur le site du plugin Yoast SEO ce que IDc'était et je n'ai pas de copie de Yoast à disposition, mais selon la yoas-plugin-dir/admin/class-metabox.phpligne 144, la meta_box enregistrée est;

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

Qui est accroché au add_meta_boxescrochet sur la ligne 32 du même fichier,

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

Bien sûr, vous pouvez obtenir l'ID de la boîte de métadonnées elle-même sur l'écran de post-édition ... Quoi qu'il en soit.

Vous pouvez effectuer les opérations suivantes,

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

... où le type de publication est le type de publication auquel vous souhaitez également appliquer cette restriction, comme postou un type de publication personnalisé un ou plusieurs!

Devrait faire l'affaire.

mise à jour: manage_pluginsaurait dû être activate_plugins- modifiée.

Adam
la source
16
+1 pour yoast_is_toast().
kaiser
@Ahmad M merci pour la modification suggérée mais le $post_typeparamètre d'argument var et action n'est pas requis dans cette instance et ne génère pas d'avis / erreur. De plus, si vous incluez $post_typevar, vous devez définir le type de publication dans la fonction ailleurs, ce que vous n'avez pas fait, donc l'utilisateur l'aurait exécuté pour le faire fonctionner incorrectement! Dans ce cas, il est parfaitement acceptable de passer le nom du type de poste, c'est-à-dire 'post'directement dans la remove_meta_boxfonction. Merci pour la suggestion quand même.
Adam
@userabuser: Merci pour la clarification, mais il $post_typeest déjà défini et prêt à être utilisé par les add_meta_boxesfonctions du crochet d'action, veuillez voir la vue Adam Brown sur ce crochet d'action. L'utilisation $post_typedans ce cas rendra le code indépendant de l' post_typeécran d'édition, ce qui signifie qu'il supprimera la wpseo_metaméta-boîte de tous les types de messages sur lesquels il se trouve et ne retournera rien au cas où il wpseo_metane serait pas trouvé.
Ahmad M
@AhmadM Merci mon pote. Je suis conscient que la var est déjà définie, mais cela ne rend pas nécessaire de passer dans le crochet / la fonction. Dans ce cas, l'OP souhaite supprimer la méta-boîte du postpost_type, c'est pourquoi la solution initiale permettra un contrôle granulaire. Cependant, dans le cas où vous souhaitez le supprimer pour tous les types de publication, l'utilisation de la var déjà définie $post_typeest satisfaisante. Ce que je vais faire, c'est éditer ma réponse pour inclure votre exemple supplémentaire en utilisant la $post_typevariable pour les situations où quelqu'un peut vouloir l'appliquer à tous les post_types enregistrés.
Adam
5

Essayez de coller cela dans un plugin ou un functions.phpfichier de thème , conformément au plugin WordPress SEO ( API Docs ), par Yoast .

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

Pour éviter toute erreur ... Ceci vérifie que la fonction existe, avant d'essayer de cacher des trucs, vous permettant de désactiver le plugin, et de ne pas jeter d'erreurs.

Vous devrez peut-être vous y connecter initpour que cela fonctionne correctement, ce qui pourrait être fait comme ceci:

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');
Michael Ecklund
la source
4

Vous pouvez le supprimer à l'aide de la fonction 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' );
}

Notez le 100000 dans add_action, cela garantit que cela est fait après que la métabox WP SEO a été connectée.

Kid Slimmer
la source
2

Vous pouvez utiliser le plugin Adminimize pour masquer des éléments aux utilisateurs en fonction de leurs rôles. Je l'ai utilisé moi-même pour cacher des éléments SEO Yoast aux clients et simplifier le back-end.

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

Assez simple à utiliser en ajoutant les sélecteurs CSS pour les éléments que vous souhaitez masquer. Je l'ai utilisé pour masquer les onglets d'analyse de page SEO (#linkdex)

noelmcg
la source
0

Eh bien, il existe une option de configuration sur le référencement WordPress par Yoast pour désactiver la partie avancée des paramètres de référencement WordPress pour les non-administrateurs. Si vous souhaitez désactiver complètement la boîte, vous pouvez utiliser d'autres plugins pour supprimer les éléments de la page de l'éditeur de publication pour les non-administrateurs, par exemple, supprimer la boîte SEO WordPress de l'éditeur de publication pour les non-administrateurs.

user36226
la source