it-swarm.com.de

wordPress separate Registrierung für verschiedene Rollen

Wenn ein Benutzer auf einen Link klickt, um sich zu registrieren, sollte ihm eine andere Rolle und nicht die Standardrolle zugewiesen werden. Ich habe diesen Link ausprobiert, aber er scheint nicht zu funktionieren. Ich habe es in die functions.php gestellt.

Separate Registrierung und Anmeldung für verschiedene Rollen

Ich brauche kein Plugin, nur den PHP-Code.

Wenn der Benutzer beispielsweise auf diesen Link klickt, sollte ihm die Verkäuferrolle automatisch zugewiesen werden. http://example.com/wp-login.php?action=register&role=seller Wenn der Benutzer auf diesen Link klickt http : //example.com/wp-login.php? action = register sollte ihnen die Standardrolle geben.

Vielen Dank

2
Charles Xavier

Ok, zuerst wird der Aktions-Hook register_form auf das Standard-Registrierungsformular WP angewendet. Denken Sie also daran, wenn Sie das nicht verwenden.

Zweitens ruft der add_action eine unbekannte Funktion auf. Das ist wahrscheinlich der Grund, warum es nicht funktioniert.

Also hier ist der korrigierte Code. Mit zusätzlicher Validierung mit Fehlermeldungen.

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