web-dev-qa-db-fra.com

Masquer les méta-boîtes pour les non-administrateurs

J'ai un site Wordpress basé sur les commentaires où j'ai une page pour chaque société différente où il peut être consulté par les utilisateurs. Le thème que j'utilise ajoute un type d'article personnalisé appelé "critique" et j'ai utilisé l'autorisation de presse pour créer des comptes utilisateur limités pouvant modifier certaines parties de ces pages de révision.

Je voulais cacher certaines des méta-boîtes auxquelles ils ne devraient pas avoir accès, telles que Yoast SEO, Gd Star Ratings, etc. .

J'ai ajouté le code suivant à la fin du fichier "functions.php" de mon répertoire de thèmes, conformément aux instructions données à de WordPress SEO par Yoast: masquer les boîtes de méta dans les messages destinés aux non-administrateurs

add_action('add_meta_boxes', 'hide_yoastseo_metabox', 99);

function hide_yoastseo_metabox()
{
    if (!current_user_can('activate_plugins'))
    {
        remove_meta_box('wpseo_meta', 'review', 'normal');
    }
}
2
Aidan Knight

Réduire la priorité de votre appel add_action() vous aide-t-il? Cela a été mentionné par Kid Slimmer et Piet dans le message que vous avez lié à vous, dans ce commentaire → https://wordpress.stackexchange.com/a/91184/33604

Leur exemple de code utilise une priorité de 10000 au lieu de 99, comme vous utilisez. Essayez de mettre à jour votre priorité sur 500 ou 1000 ou de commencer par quelque chose pour voir si quelque chose change.

Vous pouvez également trouver plus de chance en vérifiant les capacités de l'utilisateur avant d'ajouter l'action elle-même, ce qui a également été démontré dans le commentaire que j'ai lié à ci-dessus.

Ainsi, par exemple, quelque chose comme ceci pourrait fonctionner un peu mieux:

if( ! current_user_can('activate_plugins') ) {
    add_action('add_meta_boxes', 'hide_yoastseo_metabox', 1000);
}

function hide_yoastseo_metabox() {
    remove_meta_box('wpseo_meta', 'review', 'normal');
}

Outre ces recommandations, la seule autre chose à laquelle je pourrais penser serait de revérifier toutes vos valeurs pour remove_meta_box() - assurez-vous que 'wpseo_meta' est le bon identifiant de métabox pour le métabox Yoast que vous essayez de supprimer, 'review' est le type de message approprié. que vous voulez masquer la métabox, et 'normal' est la priorité appropriée pour la métabox que vous ciblez. Vous pouvez en savoir plus sur remove_meta_box()ici .

Aussi , pour ne pas insulter votre intelligence ici, mais je suis curieux: accédez-vous à votre "revue" écrans de type post-édition à différents niveaux de capacité? Si vous ne visualisez que les éléments de votre compte administrateur à partir de votre compte superadmin aux capacités complètes, le code qui ne s'applique qu'aux comptes à capacités limitées ne fonctionnera pas pour vous. Assurez-vous d'avoir un compte de test avec les capacités limitées que vous testez et essayez d'afficher des éléments à partir de ce compte.

1
George G.
function your_function() {
    global $current_user;
    if($current_user->roles[0] == 'administrator') {
        add_meta_box(your parameters);
        // fill in your parameters
    }
}
add_action('admin_init','your_function');
0
Owais Alam