Tự động xóa người dùng không hoạt động sau 2 tháng


8

Tôi đang cố gắng sửa đổi chức năng này :

// automatically delete users after 7 days in wordpress
function wcs_auto_delete_users() {
global $wpdb;
$query = $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE datediff( now(), user_registered ) > 7" );
if ( $oldUsers = $wpdb->get_results( $query, ARRAY_N ) ) {
    foreach ( $oldUsers as $user_id ) {
        wp_delete_user( $user_id[0] );
    }
}
}
add_action( 'wcs_daily_clean_database', 'wcs_auto_delete_users' );

wp_schedule_event( time(), 'daily', 'wcs_daily_clean_database' );

thay vào đó, để hoạt động khác đi - tôi muốn nó tự động xóa những người dùng chưa hoạt động trong 2 tháng. Tôi có một plugin theo dõi hoạt động của người dùng và lưu trữ dữ liệu trong wp_usermeta. Thí dụ:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Đây là truy vấn mà tôi đã đưa ra:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(SELECT meta_value) ) > 5184000

Nhưng nó không chọn đúng ID. Tôi nên thay đổi những gì để làm cho nó hoạt động?

Câu trả lời:


2

Truy vấn của bạn sai vì đối số thứ ba của bạn với TIMESTAMPDIFF không chính xác.

Bạn nên sử dụng meta_value thay vì CHỌN meta_value.

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(meta_value) ) > 5184000;

Hãy thử điều đó và xem nếu kết quả bắt đầu nhìn chính xác.

Tôi vừa kiểm tra Tài liệu Chức năng Ngày của MyQuery và bạn dường như đang làm sai.

Thay vào đó hãy thử các cách sau:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( MONTH, NOW(), FROM_UNIXTIME(meta_value) ) > 2;

Hoặc có thể...

global $wpdb;

$query = <<<SQL
 SELECT user_id 
 FROM {$wpdb->usermeta} 
 WHERE 
    meta_key = 'wp_wp_kc_last_active_time'
    AND DATEDIFF( NOW(), FROM_UNIXTIME( meta_value ) ) > 60
SQL;

$query = $wpdb->prepare( $query );

Mà nên tập hợp đúng người dùng. Nếu không, hãy thử nó mà không có tuyên bố dateiff và xem nếu có bất cứ điều gì được trả lại. Nếu không, thì có gì đó không ổn với meta_key (ví dụ: nó thực sự là wp_wp _... hay chỉ là wp_kc _...)


Không, không có lỗi cú pháp lần này, nhưng: "MySQL đã trả về một tập kết quả trống (tức là hàng 0)" và chắc chắn có người dùng đã truy cập trang web trong hơn 2 tháng.
pereyra

Hãy thử truy vấn mới tôi đã thêm. Tôi tin rằng truy vấn của bạn không làm những gì bạn nghĩ nó làm.
Privateer

Đáng buồn thay, vẫn nhận được "MySQL trả về một tập kết quả trống (tức là hàng không)".
pereyra

Đã thêm một phương thức khác với một ghi chú để kiểm tra giá trị khóa meta của bạn. Có vẻ kỳ lạ khi có wp_wp_kc_ * làm khóa meta.
Privateer

Giá trị khóa meta là chính xác. Điều này dường như để làm việc, cảm ơn bạn! CHỌN user_id TỪ wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' VÀ DATEDIFF (NOW (), FROM_UNIXTIME (meta_value))> 60;
pereyra
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.