ユーザーがリンクをクリックして登録すると、デフォルトの役割ではなく、異なる役割が割り当てられます。私はこのリンクを試しましたが、うまくいかないようです。それをfunctions.phpに入れました。
私はプラグインだけでPHPコードを必要としないでください。
たとえば、ユーザーがこのリンクをクリックすると、自動的にセラーの役割が与えられます http://example.com/wp-login.php?action=register&role=seller ユーザーがこのリンクをクリックすると http://example.com/wp-login.php?action=register それはそれらにデフォルトロールを与えるべきです。
ありがとう
さて、最初にあなたはregister_form
アクションフックがデフォルトのWP登録フォームに適用されるので、それを使用しない場合はこれを覚えておいてください。
次に、add_action
が未知の関数を呼び出しています。だから、おそらくこれがうまくいかない理由です。
だからここに修正されたコードです。エラーメッセージ付きの検証を追加しました。
//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 );
}
}