2个月后自动删除非活动用户

时间:2015-02-01 作者:pereyra

我正在尝试修改此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\\u 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。我应该做什么改变才能让它工作?

1 个回复
最合适的回答,由SO网友:Privateer 整理而成

您的查询错误,因为TIMESTAMPDIFF的第三个参数不正确。

您应该使用meta\\u value而不是SELECT meta\\u 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\\u键有问题(例如,它是真的wp\\u wp\\u…还是仅仅wp\\u kc\\u…)

结束