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?

pereyra
fonte

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

Corsário
fonte
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