web-dev-qa-db-fra.com

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

J'ai un site Web à auteurs multiples et je ne suis pas très à l'aise d'autoriser tous les membres à saisir les détails du référencement dans les messages qu'ils publient. J'aimerais que cela ne soit visible que par l'administrateur du site. Des idées?

9
Audrius

Il n'était pas indiqué dans la documentation de l'API sur le site du plug-in Yoast SEO en quoi consistait la ID et je n'ai pas de copie de Yoast à la disposition, mais d'après la yoas-plugin-dir/admin/class-metabox.php ligne 144, la meta_box enregistrée est;

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

Ce qui est accroché au crochet add_meta_boxes à 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 à méta elle-même sur l'écran d'édition postérieure ... Quoi qu'il en soit.

Vous pouvez faire ce qui suit,

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ù type de message est le type de message auquel vous souhaitez appliquer cette restriction également, par exemple post ou un type de message personnalisé, un ou plusieurs!

Devrait faire l'affaire.

update:manage_pluginsaurait dû êtreactivate_plugins- ammended.

19
userabuser

Vous pouvez le supprimer en utilisant 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 que 100000 dans add_action, cela s'assure que cela est fait après que la métabox WP SEO a été connectée.

4
Kid Slimmer

Essayez de coller ceci dans un fichier functions.php de plugin ou de thème, selon le plugin WordPress SEO ( Docs API ), 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 de tenter de masquer des éléments, ce qui vous permet de désactiver le plug-in et de ne pas générer d'erreurs.

Vous devrez peut-être vous accrocher à init pour que cela fonctionne correctement, 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');
4
Michael Ecklund

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

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

C'est assez simple à utiliser en ajoutant les sélecteurs CSS pour les éléments que vous voulez masquer. L'ont utilisé pour masquer les onglets d'analyse de page SEO (#linkdex)

2
noelmcg

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

0
user36226