web-dev-qa-db-fra.com

wordpress inscription séparée pour différents rôles

Lorsqu'un utilisateur clique sur un lien pour s'enregistrer, il doit lui attribuer un rôle différent, et non le rôle par défaut. J'ai essayé ce lien mais cela ne semble pas fonctionner. Je l'ai placé dans le fichier functions.php.

Enregistrement séparé et connexion pour différents rôles

Je n'ai pas besoin d'un plugin juste le code php.

Par exemple, si l'utilisateur clique sur ce lien, le rôle de vendeur lui sera attribué automatiquement http://example.com/wp-login.php?action=register&role=seller Si l'utilisateur clique sur ce lien http : //example.com/wp-login.php? action = register il devrait leur donner le rôle par défaut.

Merci

2
Charles Xavier

Ok, tout d’abord, le hook d’action register_form est appliqué au formulaire d’inscription par défaut WP, donc gardez cela à l’esprit si vous n’utilisez pas cela.

Deuxièmement, le add_action appelle une fonction inconnue. Il est donc probable que cela ne fonctionne pas.

Alors, voici le code corrigé. Avec validation ajoutée avec des messages d'erreur.

//create a hidden field for role
add_action('register_form','wpse_add_hidden_role_field');
  function wpse_add_hidden_role_field(){
    if ( isset( $_GET[ 'role' ] ) ){
      echo '<input id="user_role" type="hidden" tabindex="20" size="25" value="' . $_GET[ 'role' ] . '" name="role"/>';
  }
}


//validate we have permitted roles if not, don't allow subscription
add_filter( 'registration_errors', 'wpse_role_check' );
function wpse_role_check( $errors ){

  if( isset( $_POST[ 'role' ] ) ) {

    //only allow registration if roles are in this array.
    $permitted_roles = array(
        'buyer',
        'seller',
    );

    if( ! in_array( $_POST[ 'role' ], $permitted_roles ) ){

        $errors->add( 'role_not_allowed', __( '<strong>ERROR</strong>: This registration is not allowed.', 'my_textdomain' ) );

    }

  }

  // Else disallow public registration (i.e. no role query string found )
  // If you don't take this into account, anyone can register as subscribers
  else {

    $errors->add( 'public_not_allowed', __( '<strong>ERROR</strong>: Public registration is not allowed.', 'my_textdomain' ) );

  }

  return $errors;

}

//update user profile that have passed registration validation
add_action('user_register', 'wpse_update_role');
function wpse_update_role( $user_id ) {
  if ( isset( $_POST[ 'role' ] ) ){
    $userdata = array();
    $userdata[ 'ID' ] = $user_id;
    $userdata[ 'role' ] = $_POST[ 'role' ];

    wp_update_user( $userdata );

  }
} 
2
bynicolas