Adicione linha ao database personalizado Tabela e exclua todas as linhas com mais de 1 dia

Estou editando um plug-in do contador de exibição para que ele registre o IP de todos os usuários que visualizaram uma publicação. Isso é para impedir que eles atualizem a página e, assim, criem visões artificiais.

A parte com a qual estou tendo problemas é adicionar linhas à tabela do database e, posteriormente, remover as linhas anteriores a uma hora. Tenho certeza de que estou fazendo algo errado, mas não consigo descobrir o quê. A documentação do WordPress sobre isso é muito confusa para mim.

Esta é a minha function de criação de database

### Create Database for IP Logging function postviews_create_table () { global $wpdb; $table_name = $wpdb->prefix . "postviews_ips"; $sql = "CREATE TABLE $table_name ( postid MEDIUMINT NOT NULL, ip VARCHAR(15) NOT NULL, time DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL );"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } 

E esta é a function que é suposto adicionar novas linhas e excluir antigas.

 ### Add user IP to Database & Delete Entries Older Than 1 Day function postviews_add_ip () { global $post; $id = $post->ID; $ip = $_SERVER['REMOTE_ADDR']; $time = date("Ymd H:i:s"); $wpdb->insert( 'wp_postviews_ips', array( 'postid' => $id, 'ip' => $ip, 'time' => $time ) array( '%d', '%s', '%d' ) ); $sql = "DELETE FROM wp_postviews_ips WHERE time_created query($sql); } 

Solutions Collecting From Web of "Adicione linha ao database personalizado Tabela e exclua todas as linhas com mais de 1 dia"

Você tem algumas coisas misturadas.

Primeiro, sua consulta verifica o time_created , que não existe na sua tabela.

Em segundo lugar, você tenta inserir a data como um integer usando %d . Você pode ter que tratá-lo como uma string.

Finalmente, você deve definir $wpdb como global em sua function

 function postviews_add_ip () { global $post, $wpdb; // Database set to global $id = $post->ID; $ip = $_SERVER['REMOTE_ADDR']; $time = date("Ymd H:i:s"); $wpdb->insert( 'wp_postviews_ips', array( 'postid' => $id, 'ip' => $ip, 'time' => $time ), // added a colon array( '%d', '%s', '%s' // treat it as a string ) ); $sql = "DELETE FROM wp_postviews_ips WHERE time < (NOW() - INTERVAL 1 DAY)"; //changed rowname $wpdb->query($sql); } 

Colocação do código e da estrutura

Eu recomendaria fortemente dividir as funções de inserção e exclusão. Você pode usar wp-cron para exclusão, então você não precisa chamar esta function o tempo todo. A function em si deve funcionar dessa maneira – mas não se esqueça de otimizar isso 🙂