web-dev-qa-db-fra.com

Impossible d'ajouter un utilisateur au blog lors de l'inscription (Multisite)

J'essaie d'ajouter des utilisateurs à un blog spécifique avec un rôle choisi par l'utilisateur lors de son inscription.

Je suis en mesure d'ajouter le rôle souhaité à meta avec ceci:

add_filter( 'add_signup_meta', 'add_register_meta'  );

public function add_register_meta($meta = array()) {

    $role = sanitize_text_field( $_POST['role'] );
    $meta['role'] =  $role;

    return $meta;

}

Je peux voir la méta sérialisée dans la table d'inscription de la base de données. J'essayais alors d'ajouter l'utilisateur ayant ce rôle dans un blog spécifique:

add_action ( 'wpmu_activate_user', 'assign_user_to_blog' );

    public function assign_user_to_blog($user_id, $password, $meta ) {

    if ( isset($meta['role']) ) {
            add_user_to_blog( 3, $user_id, $meta['role']);

    } else {
            add_user_to_blog( 3, $user_id, "dmd");

    }

}

Mais lorsque l'utilisateur est activé, rien ne se passe. L'utilisateur n'est pas ajouté au blog.

J'ai remarqué quelque chose de bizarre, c'est que l'utilisateur reçoit le courrier électronique d'activation ET le courrier électronique avec le mot de passe en même temps. C'est comme si les utilisateurs étaient activés automatiquement, pas par la clé d'activation dans l'e-mail. Cela pourrait-il être le problème? Pourquoi est-ce?

UPDATE: J'ai déplacé le plugin vers mu-plugins, et maintenant cela fonctionne pour la plupart.

Les utilisateurs sont ajoutés au blog 3, mais pas avec le rôle dans la méta, mais avec le rôle 'dmd'.

Y a-t-il un moyen de voir la valeur de $ méta? var_dump ne fonctionne pas.

2
coopersita

En ce qui concerne la partie update de votre question:

Je pense que le problème ici est qu'il vous manque le nombre d'arguments acceptés dans votre configuration add_action().

Si vous extrayez le Codex , l'utilisation est la suivante:

add_action( $hook, $function_to_add, $priority, $accepted_args );

où par défaut $priority = 10 et $accepted_args = 1.

Donc, votre extrait de code devrait ressembler à:

add_action ( 'wpmu_activate_user', 'assign_user_to_blog', 10, 3 );

function assign_user_to_blog( $user_id, $password, $meta )
{
    $role = isset( $meta['role'] ) ? $meta['role'] : 'dmd';
    add_user_to_blog( 3, $user_id, $role );
}

mais la variable $meta n'est pas définie dans votre extrait de code précédent.

Lors du développement, n'oubliez pas d'utiliser WP_DEBUG pour surveiller les erreurs, avertissements et avis de PHP. Vérifiez par exemple le débogage dans WordPress dans le Codex.

2
birgire