私は新しいWordPress Multisiteインスタンスをセットアップしています、そしてまだスタックの中でいくつかのよじれを解決しています。現時点で最も重要なのは、ユーザー登録メールが何らかの理由で配信されていないことです。その結果、それらをアクティブにするために必要な確認Eメールが失われるので、いくつかのユーザー名がぎこちなく立ち往生します。
今のところ確認メールなしでこれらのユーザー名を手動で登録したいのですが、登録しようとすると名前が予約されて数日以内に利用可能になるというエラーが表示されます。予約を解除するにはどうすればよいですか。
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
/1
列active
があります。これは、ユーザーがアクティブな場合は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引数(配列)を使用できます。 $_POST
ed値はまだサニタイズする必要があることに注意してください。ヒント:user_email
も使用できます。
global $wpdb;
$wpdb->delete(
$wpdb->signups,
array( 'user_login' => 'some_login', ),
array( '%s', )
);
特定のユーザーのデータベースからサインアップを削除するための迅速な解決策が必要な場合は、次のようにします。
/**
* 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のユーザーのアクティベーションキーを手動で削除または承認できます。