Bagaimana saya bisa membatalkan pendaftaran registrasi nama pengguna yang tertunda?

9

Saya sedang menyiapkan instance WordPress Multisite baru, dan saya masih mengerjakan beberapa ketegaran di stack. Paling signifikan saat ini, email pendaftaran pengguna tidak dikirimkan karena alasan tertentu. Akibatnya, beberapa nama pengguna terjebak dalam limbo karena email konfirmasi yang diperlukan untuk mengaktifkannya hilang.

Untuk saat ini saya hanya ingin mendaftarkan nama pengguna ini secara manual tanpa email konfirmasi, tetapi ketika saya mencoba melakukannya saya mendapatkan kesalahan mengatakan nama itu dicadangkan dan mungkin tersedia dalam beberapa hari. Bagaimana saya bisa mencadangkan mereka?

Kaelin Colclasure
sumber

Jawaban:

13

Lapisan Akses DB & menghapus baris

WordPress menggunakan wpdbkelas untuk mengelola akses ke lapisan basis data menggunakan global $wpdb. Kelas menyediakan metode yang dinamai delete()untuk menghapus baris dari tabel:

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

Tabel multisite & kunci aktivasi

WordPress memiliki beberapa tabel spesifik MU , di mana ada {$wpdb->prefix}signups(awalan diatur dalam wp-config.phpfile Anda ). Skema tabel di sini . Penanggung jawab untuk aktivasi akun pengguna adalah activation_key, yang ditetapkan setelah pengguna mengklik tautan dalam surat. Setelah itu, activatedkunci akan diatur dengan datetimenilai. Sebelum akun diaktifkan, nilai standarnya adalah 0000-00-00 00:00:00(jika Anda perlu menanyakan default). Juga dalam proses adalah kolom tinyint/ , yang diatur ke jika pengguna aktif.1active1

Core sendiri menggunakan wpmu_activate_signup(). Lihatlah beberapa contoh. Salah satunya adalah yang memperbarui entri pengguna untuk mengaktifkannya - ulang agar mudah dibaca.

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

Membangun kueri terhadap akun yang belum diaktifkan

Biarkan WP melakukan kerja kerasnya:

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

Anda bisa menggunakan argumen ke-3 (array) jika Anda menggunakan formulir (n admin) untuk melakukan permintaan tersebut (untuk misalnya memperluas a WP_List_Table) untuk menunjukkan bahwa Anda menggunakan string. Perlu diingat bahwa Anda harus tetap membersihkan $_POSTnilai ed. Petunjuk: Anda dapat menggunakannya user_emailjuga.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
kaisar
sumber
9

Jika Anda menginginkan solusi cepat untuk menghapus pendaftaran di basis data untuk pengguna tertentu, ini harus melakukan apa yang Anda inginkan:

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

Anda juga dapat menggunakan plugin di repo WordPress.org yang disebut 'Tombol Aktivasi Pengguna' untuk mengelola masalah ini saat Anda mencari tahu mengapa email tidak terkirim. Ini memungkinkan Anda secara manual menghapus atau menyetujui kunci aktivasi untuk pengguna di Multisite.

DrewAPicture
sumber