web-dev-qa-db-ja.com

保留中のユーザー名登録を予約解除するにはどうすればよいですか。

私は新しいWordPress Multisiteインスタンスをセットアップしています、そしてまだスタックの中でいくつかのよじれを解決しています。現時点で最も重要なのは、ユーザー登録メールが何らかの理由で配信されていないことです。その結果、それらをアクティブにするために必要な確認Eメールが失われるので、いくつかのユーザー名がぎこちなく立ち往生します。

今のところ確認メールなしでこれらのユーザー名を手動で登録したいのですが、登録しようとすると名前が予約されて数日以内に利用可能になるというエラーが表示されます。予約を解除するにはどうすればよいですか。

8

DBアクセスレイヤと行の削除

WordPressはwpdbクラスを使用してglobal $wpdbを使用してデータベース層へのアクセスを管理します。このクラスは、テーブルから行を削除するために delete() という名前のメソッドを提供します。

$wpdb->delete( $table, $where, $where_format = null );

マルチサイトテーブルとアクティベーションキー

WordPressには いくつかのMU固有のテーブル があります。ここで1つは{$wpdb->prefix}signups(あなたのwp-config.phpファイルに設定されたプレフィックス)です。 表のスキームはこちら 。ユーザーアカウントのアクティブ化を担当するのは、ユーザーがメール内のリンクをクリックした後に設定されるactivation_keyです。その後、activatedキーはdatetime値で設定されます。アカウントがアクティブ化される前のデフォルト値は0000-00-00 00:00:00になります(デフォルトを照会する必要がある場合)。また、このプロセスにはtinyint/1activeがあります。これは、ユーザーがアクティブな場合は1に設定されます。

コア自体は wpmu_activate_signup() を使用します。いくつかの例についてはそれを見てください。 1つはユーザーエントリを更新してそれをアクティブにする以下のものです - 読みやすさのために作り直されました。

$wpdb->update(
    $wpdb->signups,
    array(
        'active'    => 1,
        'activated' => current_time( 'mysql', true ),
    ),
    array( 'activation_key' => $key, )
);

まだ有効化されていないアカウントに対してクエリを作成する

単にWPに大変な仕事をさせましょう:

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', )
);

あなたが文字列を使用していることを示すために(例えばWP_List_Tableを拡張するために)それらの要求を実行するために(n admin)形式を使用しているなら、あなたは第3引数(配列)を使用できます。 $_POSTed値はまだサニタイズする必要があることに注意してください。ヒント:user_emailも使用できます。

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
11
kaiser

特定のユーザーのデータベースからサインアップを削除するための迅速な解決策が必要な場合は、次のようにします。

/**
 * Delete a row in the signups table for a given username.
 *
 * @param string $user_login Username.
 * @return bool Whether the signup row was successfully deleted.
 */
function delete_activation_key_by_user( $user_login ) {
    global $wpdb;

    $success = false;

    if ( false !== $wpdb->delete( $wpdb->signups, array( 'user_login' => sanitize_text_field( $user_login ) ) ) ) {
        $success = true;
    }
    return $success;
}

var_dump( delete_activation_key_by_user( 'the_username' ) );
// bool(true|false)

WordPress.orgのリポジトリにある 'User Activation Keys'というプラグインを使用して、電子メールが送信されない理由を把握しながらこの問題を管理することもできます。これにより、Multisiteのユーザーのアクティベーションキーを手動で削除または承認できます。

8
DrewAPicture