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を選択していません。機能させるには何を変更すればよいですか?

回答:


2

TIMESTAMPDIFFへの3番目の引数が正しくないため、クエリが正しくありません。

SELECT meta_valueの代わりに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

追加した新しいクエリを試してください。あなたのクエリはあなたが思っていることを実行していないと思います。
Privateer 2015

残念ながら、それでも「MySQLは空の結果セット(つまり、ゼロ行)を返しました」を取得します。
pereyra 2015

メタキーの値も確認するためのメモを含む別のメソッドを追加しました。wp_wp_kc_ *をメタキーとして持つのは奇妙に思えます。
Privateer、2015

メタキーの値は正しいです。これは動作するようです、ありがとう!SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND DATEDIFF(NOW()、FROM_UNIXTIME(meta_value))> 60;
pereyra 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.