Excluir automaticamente usuários inativos após 2 meses


8

Estou tentando modificar esta função :

// 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' );

funcione de maneira diferente. Quero que ele exclua automaticamente os usuários que não estão ativos há, por exemplo, dois meses. Eu tenho um plugin que rastreia a atividade do usuário e armazena os dados em wp_usermeta. Exemplo:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Esta é a consulta que eu criei:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(SELECT meta_value) ) > 5184000

Mas não está selecionando os IDs corretos. O que devo mudar para que funcione?

Respostas:


2

Sua consulta está incorreta porque seu terceiro argumento para TIMESTAMPDIFF está incorreto.

Você deve usar meta_value em vez de 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;

Tente isso e veja se os resultados começam a parecer corretos.

Acabei de verificar os Documentos da função de data do mySQL e você parece estar fazendo isso errado.

Tente o seguinte:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( MONTH, NOW(), FROM_UNIXTIME(meta_value) ) > 2;

Ou talvez...

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 );

O que deve reunir os usuários certos. Caso contrário, tente sem a declaração datada e verifique se alguma coisa foi retornada. Caso contrário, algo está errado com a meta_key (por exemplo, é realmente wp_wp _... ou apenas wp_kc _...)


Não, não houve erro de sintaxe desta vez, mas: "O MySQL retornou um conjunto de resultados vazio (ou seja, zero linhas)", e definitivamente existem usuários que não visitam o site há mais de 2 meses.
— Pereyra

Experimente a nova consulta que adicionei. Acredito que sua consulta não faz o que você pensa que faz.
— Privateer

Infelizmente, ainda recebendo "o MySQL retornou um conjunto de resultados vazio (ou seja, zero linhas)".
— Pereyra

Adicionado outro método com uma nota para verificar também o valor da meta-chave. Parece estranho ter wp_wp_kc_ * como uma meta chave.
— Corsário

O valor da meta-chave está correto. Isso parece funcionar, obrigado! SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND DATEDIFF (NOW (), FROM_UNIXTIME (meta_value))> 60;
— Pereyra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.