Làm cách nào tôi có thể hủy đăng ký tên người dùng đang chờ xử lý?


9

Tôi đang thiết lập một phiên bản WordPress Multisite mới và vẫn đang xử lý một số nút trong ngăn xếp. Đáng kể nhất tại thời điểm này, email đăng ký người dùng không được gửi vì một số lý do. Do đó, một số tên người dùng bị kẹt trong tình trạng lấp lửng vì các email xác nhận cần thiết để kích hoạt chúng bị mất.

Hiện tại tôi chỉ muốn đăng ký thủ công những tên người dùng này mà không cần email xác nhận, nhưng khi tôi cố gắng thực hiện thì tôi gặp lỗi khi nói tên đó được bảo lưu và có thể có sẵn trong một vài ngày. Làm thế nào tôi có thể bỏ dự trữ chúng?

Câu trả lời:


13

Lớp DB Access & xóa các hàng

WordPress sử dụng wpdblớp để quản lý quyền truy cập vào lớp cơ sở dữ liệu bằng cách sử dụng global $wpdb. Lớp cung cấp một phương thức có tên delete()để xóa các hàng khỏi các bảng:

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

Bảng nhiều trang và khóa kích hoạt

WordPress có một số bảng cụ thể MU , trong đó có một bảng{$wpdb->prefix}signups (tiền tố được đặt trong wp-config.phptệp của bạn ). Bảng sơ đồ ở đây . Chịu trách nhiệm kích hoạt tài khoản người dùng là activation_key, được đặt sau khi người dùng nhấp vào liên kết trong thư. Sau đó, activatedkhóa sẽ được đặt với một datetimegiá trị. Trước khi tài khoản được kích hoạt, giá trị mặc định sẽ là 0000-00-00 00:00:00(trong trường hợp bạn cần truy vấn cho mặc định). Ngoài ra trong quá trình là cột tinyint/ , được đặt thành nếu người dùng đang hoạt động.1active1

Bản thân Core sử dụng wpmu_activate_signup(). Nhìn vào nó cho một số ví dụ. Một là sau đây cập nhật một mục người dùng để kích hoạt nó - làm lại để dễ đọc.

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

Xây dựng truy vấn đối với các tài khoản chưa được kích hoạt

Đơn giản chỉ cần để WP làm công việc khó khăn:

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

Bạn có thể sử dụng đối số thứ 3 (mảng) nếu bạn đang sử dụng biểu mẫu (n admin) để thực hiện các yêu cầu đó (ví dụ: mở rộng a WP_List_Table) để cho biết rằng bạn đang sử dụng chuỗi. Hãy nhớ rằng bạn vẫn nên vệ sinh $_POSTcác giá trị ed. Gợi ý: Bạn cũng có thể sử dụng user_email.

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

8

Nếu bạn muốn một giải pháp nhanh chóng để xóa đăng ký trong cơ sở dữ liệu cho một người dùng cụ thể, thì điều này sẽ làm những gì bạn muốn:

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

Bạn cũng có thể sử dụng một plugin trong repo WordPress.org có tên 'Khóa kích hoạt người dùng' để quản lý vấn đề này trong khi bạn đang tìm hiểu tại sao email không được gửi. Nó cho phép bạn xóa hoặc phê duyệt khóa kích hoạt thủ công cho người dùng trong Multisite.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.