2个月后自动删除不活动的用户


8

我正在尝试修改此功能

// 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。我应该更改使其工作吗?

Answers:


2

您的查询错误,因为您对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日期函数文档,您似乎在做错了。

请尝试以下操作:

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


是的,这次没有语法错误,但是:“ MySQL返回了一个空结果集(即零行)”,并且肯定有超过2个月没有访问该站点的用户。
pereyra 2015年

尝试我添加的新查询。我相信您的查询没有按照您的想法做。
私人2015年

可悲的是,仍然得到“ MySQL返回了一个空结果集(即零行)”。
pereyra'2

添加了另一个带有注释的方法来检查您的元键值。将wp_wp_kc_ *作为元密钥似乎很奇怪。
私人2015年

元密钥值正确。这似乎有效,谢谢!从wp_usermeta中选择user_id,其中meta_key ='wp_wp_kc_last_active_time'并且DATEDIFF(NOW(),FROM_UNIXTIME(meta_value))> 60;
pereyra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.