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.
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.