web-dev-qa-db-fra.com

Donner temporairement la capacité 'manage_options'

Afin de permettre aux éditeurs de modifier la méta de l'auteur d'un autre auteur (update_user_attribute), je dois leur attribuer la capacité 'manage_options' ou sinon, je reçois un message 'Cheatin' huh '. Je veux seulement leur donner cette possibilité sur une seule page spécifique Edit Author Meta.

Je donne à l'éditeur la permission de list_users d'accéder à la table des utilisateurs. Je donne la permission à l'éditeur de "manage_options" en entrant dans la méta page de l'auteur. (J'ai essayé de placer en haut de la fonction save_profile_fields mais j'ai quand même eu le message de dé.)

Je supprime la fonctionnalité 'manage_options' au bas de la fonction save_profile_fields. Cela fonctionne, mais si l'éditeur omet de sauvegarder quoi que ce soit sur la méta page de l'auteur, il conserve la fonctionnalité 'manage_options'.

if( !current_user_can( 'manage_options' ) && current_user_can( 'edit_others_posts' ) ){
    $edit_editor_role = get_role( 'editor' );
    $edit_editor_role->add_cap( 'manage_options' );
}

Où pourrait-on supprimer la capacité 'manage_options' du rôle d'éditeur?

$edit_editor_role = get_role( 'editor' );
$edit_editor_role->remove_cap( 'manage_options' );
5
AlxVallejo

Bonne question! La vérification des capacités est probablement effectuée assez tôt dans le processus de chargement. En regardant /wp-admin/users.php, vous pouvez constater que l’une des premières choses à se produire est current_user_can( 'list_users' ), de sorte qu’il est clairement nécessaire d’obtenir le "Cheatin 'euh?" Attention. Mais juste avant cela, /wp-admin/admin.php est inclus et au bas de ce fichier, WordPress appellera une action individuelle pour chaque page, load-users.php lors du chargement de wp-admin/users.php.

Cela signifie que vous devriez pouvoir configurer une fonction pour ajouter les fonctionnalités nécessaires pour effectuer vos tâches lors du chargement de cette page (étant donné que l'utilisateur actuel dispose des autorisations suffisantes pour commencer, naturellement). Quelque chose comme cela pourrait fonctionner pour donner à un utilisateur de nouvelles fonctionnalités dans la liste des utilisateurs et les pages de modification utilisateur:

function my_add_caps() {
    // add capabilities here
}
add_action('load-users.php', 'my_add_caps');
add_action('load-profile.php', 'my_add_caps'); // might be needed if you somehow cannot edit your own user
add_action('load-user-edit.php', 'my_add_caps');

Je ne m'inquiéterais pas trop de la suppression des fonctionnalités, une fois la page chargée, les fonctionnalités ajoutées auront joué leur rôle. Gardez toutefois à l'esprit que vous devrez peut-être ajouter une fonctionnalité pour les pages d'administration responsables du stockage des options, ou tout gestionnaire de demande AJAX, en fonction du nombre de vérifications de fonctionnalité effectuées par WordPress lors de la validation/stockage des options.

1
Simon