web-dev-qa-db-fra.com

Problème d'utilisation du hook role_has_cap

J'essaie de filtrer une vérification de capacité afin de contourner le manque de filtres pour personnaliser la page d'édition de l'utilisateur dans la zone d'administration. Mais je n'arrive pas à ajouter de filtres à un crochet, et je suis sûr qu'il me manque quelque chose de fondamental ici.

Le crochet en question est role_has_cap, situé à la ligne 343 de wp-includes/capabilities.php. Ça lit:

$capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name );

J'essaie de tester mon filtre en ajoutant ceci à mon functions.php:

add_filter('role_has_cap', 'my_role_has_cap_filter', 10, 3);
function my_role_has_cap_filter($var_one, $var_two, $var_three) {
    print_r($var_one);
    print_r($var_two);
    print_r($var_three);
}

Mais absolument rien ne se passe. Même si j'ajoute le filtre avec moins de paramètres que ce que ma fonction nécessite (ce qui, à ma connaissance, devrait déclencher une erreur PHP), je suis complètement ignoré par WordPress.

Ce que j’essaie vraiment d’obtenir est de retourner false à current_user_can( 'edit_posts' ) ou current_user_can( 'edit_pages' ) lorsque user-edit.php est affiché dans la zone administrative sans supprimer ces fonctionnalités , mais le Le fait de ne pas appliquer un filtre me semble plus pertinent que mon objectif ultime.

2
Tomas Buteler

Je l'ai finalement compris:

Pour commencer, j'utilisais le mauvais crochet. J'aurais dû utiliser plutôt user_has_cap hook, qui est ce qui a une chance d'être appelé lors de l'utilisation de current_user_can().

Mais deuxièmement, et le plus important de tous, je voyais la page alors que j'étais connecté en tant que super_admin, ce qui n'a pas du tout déclenché la fonction apply_filter. Étant donné que, par définition, le super_admin a toutes les capacités , WP ne ressent le besoin de filtrer aucune des vérifications.

0
Tomas Buteler