web-dev-qa-db-ja.com

WordPress登録を上書きして自動生成されたユーザー名を挿入するにはどうすればいいですか?

WordPressの登録時にユーザー名を自動生成する必要があります。カスタム登録フォームをセットアップして、functions.phpでユーザー名を作成したいと思います。

これがうまくいかない理由を誰かに教えてもらえますか。 カスタマイズされた登録フォームの/ - WordPress Codexを読んだ後に動作するはずです

function register_hook ( $user_id ) {
  update_user_meta( $user_id, 'signup_username', 'the-auto-generated-name' );
  // also tried this:
  // update_user_meta( $user_id, 'user_login', 'the-auto-generated-name' );
}
add_action( 'user_register', 'register_hook' );
1
user1462

1つの代替方法は、新しい登録フォームを送信するとき、つまり登録フォームをWP処理する前に、$_POST['user_login']入力値を変更することです。これを達成するための良いフックは、登録フォームを処理してレンダリングする前に起動するlogin_form_registerです。 login_initも機能しますが、registerアクションを確実に実行するためにはさらに作業が必要です。

add_action('login_form_register', 'custom_user_login');
function custom_user_login() {

    // make sure regisration form is submitted
    if ($_SERVER['REQUEST_METHOD'] != 'POST')
        return;

    // base of user_login, change it according to ur needs
    $ulogin = 'random-user';

    // make user_login unique so WP will not return error
    $check = username_exists($ulogin);
    if (!empty($check)) {
        $suffix = 2;
        while (!empty($check)) {
            $alt_ulogin = $ulogin . '-' . $suffix;
            $check = username_exists($alt_ulogin);
            $suffix++;
        }
        $ulogin = $alt_ulogin;
    }

    $_POST['user_login'] = $ulogin;
}
1
Ahmad M

あなたはpre_user_loginフィルタを通してユーザログインを変えることができます。これは、ユーザーが または更新された が作成されたときに実行されることに注意してください。

function wpd_custom_user_login( $user_login ) {
    $user_login = 'the-auto-generated-name';
    return $user_login;
}
add_filter( 'pre_user_login' , 'wpd_custom_user_login' );
1
Milo