web-dev-qa-db-fra.com

Ajout d'un rôle supplémentaire à un administrateur

L'utilisateur 19 est un WP Admin.

$user = new WP_user( 19 );
$user->add_role( 'custom_role' );

Le code ci-dessus fonctionne et ajoute le rôle custom_role.

Cependant, lorsque je lance le même code sur le hook personal_options_update et edit_user_profile_update, ce n'est pas le cas.

J'ai ajouté une case à cocher à la page de profil de l'utilisateur. La fonction appelée à partir des deux crochets ci-dessus puis ...

if( user_can( $user_id, 'administrator' ) ) {
    $user = get_user_by( 'id', $user_id );      
    if( ! empty( $_POST['my_checkbox'] ) )  {

        update_user_meta( $user_id, 'my_checkbox', true );
        $user->add_cap( 'one_cap' );
        $user->add_cap( 'two_cap' );
        $user->add_role( 'custom_role' );

    }
}

one_cap et two_cap sont tous deux définis correctement pour l'utilisateur, mais aucun signe de custom_role et rien n'est écrit dans le journal de débogage.

Quelle pourrait en être la cause?

1
Mike

utilisez le hook profile_update et dans la fonction hookée, exécutez cette vérification pour vous assurer que les données précédentes sont également ajoutées au profil des utilisateurs lors de la mise à jour.

if ( $update ){
        do_action('profile_update', $user_id, $old_user_data);
}else{
        do_action('user_register', $user_id);
}
return $user_id;

Cette réponse peut vous aider à mieux comprendre: WordPress edit_user_profile_update met à jour le rôle secondaire

1
Nabeel Khan