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?

pereyra
sumber

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 _...)

Privateer
sumber
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