Secara otomatis menghapus pengguna yang tidak aktif setelah 2 bulan


8

Saya mencoba mengubah fungsi ini :

// 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' );

untuk bekerja secara berbeda sebagai gantinya - Saya ingin secara otomatis menghapus pengguna yang belum aktif dalam, katakanlah, 2 bulan. Saya memiliki plugin yang melacak aktivitas pengguna dan menyimpan data di wp_usermeta. Contoh:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Ini adalah pertanyaan yang saya buat:

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

Tapi itu tidak memilih ID yang tepat. Apa yang harus saya ubah untuk membuatnya berfungsi?

Jawaban:


2

Permintaan Anda salah karena argumen ketiga Anda ke TIMESTAMPDIFF salah.

Anda harus menggunakan meta_value alih-alih SELECT 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;

Coba itu dan lihat apakah hasilnya mulai terlihat benar.

Saya baru saja memeriksa Dokumen Fungsi Tanggal mySQL dan Anda tampaknya melakukan kesalahan ini.

Coba yang berikut ini sebagai gantinya:

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

Atau mungkin...

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 );

Yang seharusnya mengumpulkan pengguna yang tepat. Jika tidak, coba tanpa pernyataan tanggal dan lihat apakah ada yang dikembalikan. Jika tidak, maka ada sesuatu yang salah dengan meta_key (mis. Apakah itu benar-benar wp_wp _... atau hanya wp_kc _...)


Tidak, tidak ada kesalahan sintaksis saat ini, tetapi: "MySQL mengembalikan set hasil kosong (yaitu nol baris)", dan pasti ada pengguna yang belum mengunjungi situs dalam lebih dari 2 bulan.
— pereyra

Coba kueri baru yang saya tambahkan. Saya yakin permintaan Anda tidak melakukan apa yang Anda pikirkan.
— Prajurit

Sayangnya, masih mendapatkan "MySQL mengembalikan set hasil kosong (yaitu nol baris)".
— pereyra

Menambahkan metode lain dengan catatan untuk memeriksa nilai kunci meta Anda juga. Tampaknya aneh memiliki wp_wp_kc_ * sebagai kunci meta.
— Prajurit

Nilai kunci meta sudah benar. Ini sepertinya berhasil, terima kasih! PILIH user_id DARI wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' DAN DATEIFF (SEKARANG (), FROM_UNIXTIME (meta_value))> 60;
— pereyra
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.