問題描述
我試圖修改這個 function:
// 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' );
以不同的方式工作 – 我想要它自動刪除在 2 個月內沒有活動的使用者。我有一個跟蹤使用者活動並將資料儲存在 wp_usermeta 中的外掛。例:
user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627
這是我提出的查詢:
SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(SELECT meta_value) ) > 5184000
但是它沒有選擇正確的 ID 。我應該改變什麼才能使其工作?
最佳解決方案
您的查詢錯誤,因為 TIMESTAMPDIFF 的第三個引數不正確。
您應該使用 meta_value 而不是 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;
嘗試,看看結果是否開始正確。
我剛剛檢查了 mySQL Date Function Docs,你似乎做錯了。
嘗試以下代替:
SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( MONTH, NOW(), FROM_UNIXTIME(meta_value) ) > 2;
或者可能…
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 );
哪個應該收集合適的使用者。如果沒有,請嘗試沒有 datediff 宣告,看看是否有任何東西返回。如果沒有,那麼與 meta_key 有什麼不同 (例如,它真的是 wp_wp _… 或只是 wp_kc _…)
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。