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.