ฉันจะยกเลิกการจองการลงทะเบียนชื่อผู้ใช้ที่ค้างอยู่ได้อย่างไร


9

ฉันกำลังตั้งค่าอินสแตนซ์ของ WordPress Multisite ใหม่และยังคงหาข้อบกพร่องบางอย่างในสแต็ก ที่สำคัญที่สุดในขณะนี้อีเมลการลงทะเบียนผู้ใช้ไม่ได้ถูกส่งด้วยเหตุผลบางอย่าง เป็นผลให้ชื่อผู้ใช้หลายชื่อติดอยู่ในบริเวณขอบรกเนื่องจากอีเมลยืนยันที่จำเป็นในการเปิดใช้งานจะสูญหาย

สำหรับตอนนี้ฉันต้องการลงทะเบียนชื่อผู้ใช้เหล่านี้ด้วยตนเองโดยไม่ต้องมีอีเมลยืนยัน แต่เมื่อฉันพยายามทำเช่นนั้นฉันได้รับข้อผิดพลาดว่าชื่อสงวนไว้และอาจใช้ได้ในสองสามวัน ฉันจะยกเลิกการจองได้อย่างไร

คำตอบ:


13

DB Access เลเยอร์ & ลบแถว

WordPress ใช้ระดับการจัดการการเข้าถึงไปยังชั้นฐานข้อมูลโดยใช้wpdb global $wpdbชั้นเรียนมีวิธีการตั้งชื่อdelete()เพื่อลบแถวออกจากตาราง:

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

หลายตารางและปุ่มเปิดใช้งาน

WordPress มีตารางเฉพาะบาง MUซึ่งหนึ่งคือ{$wpdb->prefix}signups(ตั้งค่าคำนำหน้าในwp-config.phpไฟล์ของคุณ) ตารางโครงการที่นี่ ความรับผิดชอบในการเปิดใช้งานบัญชีผู้ใช้คือการ activation_keyตั้งค่าหลังจากที่ผู้ใช้คลิกที่ลิงค์ในจดหมาย หลังจากนั้นactivatedคีย์จะได้รับการตั้งdatetimeค่า ก่อนที่จะเปิดใช้งานบัญชีค่าเริ่มต้นจะเป็น0000-00-00 00:00:00(ในกรณีที่คุณต้องการสอบถามค่าเริ่มต้น) นอกจากนี้ในกระบวนการคือtinyint/ 1คอลัมน์activeซึ่งถูกตั้งค่าเป็น1หากผู้ใช้ที่ใช้งานอยู่

wpmu_activate_signup()คอตัวเองใช้ ดูมันสำหรับตัวอย่าง หนึ่งคือสิ่งต่อไปนี้ที่อัพเดตรายการผู้ใช้เพื่อเปิดใช้งาน - ทำใหม่เพื่อให้สามารถอ่านได้

$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', )
);

คุณสามารถใช้อาร์กิวเมนต์ที่ 3 (อาร์เรย์) หากคุณใช้แบบฟอร์ม (n ผู้ดูแลระบบ) เพื่อดำเนินการตามคำขอเหล่านั้น (เช่นเช่นการขยาย a WP_List_Table) เพื่อระบุว่าคุณกำลังใช้สตริง โปรดทราบว่าคุณยังคงต้องทำความสะอาด$_POSTค่า ed คำแนะนำ: คุณสามารถใช้user_emailเช่นกัน

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

9

หากคุณต้องการวิธีแก้ปัญหาอย่างรวดเร็วสำหรับการลบการสมัครใช้งานในฐานข้อมูลสำหรับผู้ใช้ที่เฉพาะเจาะจงสิ่งนี้ควรทำสิ่งที่คุณต้องการ:

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

คุณสามารถใช้ปลั๊กอินใน repo ของ WordPress.org ที่เรียกว่า 'User Activation Keys' เพื่อจัดการปัญหานี้ในขณะที่คุณกำลังค้นหาสาเหตุที่ไม่ได้ส่งอีเมล ช่วยให้คุณลบหรืออนุมัติคีย์การเปิดใช้งานสำหรับผู้ใช้ใน Multisite ด้วยตนเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.