Pesquisar programaticamente postagens do WordPress por intervalo de datas
TL;DR: O código compartilhado nesta postagem mostra como você pode modificar a consulta executada na página Todas as postagens para que você possa limitar a forma de pesquisa de postagens a um intervalo de datas especificado.
Já faz algum tempo desde a última vez que escrevi sobre o uso do post_wherefiltro para modificar a consulta de pesquisa que é executada em uma determinada página, como a área All Posts do WordPress. Mas, dado o fato de que há uma variedade de usos para recuperar postagens – e tipos de postagem personalizados – de diferentes maneiras, há várias maneiras de usar esse único filtro.
Pesquisar postagens por período
Para pesquisar postagens por período, veja o que precisa acontecer:
- Registre um retorno de chamada com o
posts_wherefiltro, - Verifique se a função aceita a string
wheree a instânciaWP_Queryque está sendo executada na página - Obtenha a data e hora de hoje e a data e hora de quatro semanas atrás
- Anexe a
wherecláusula para restringir os resultados à data returna consulta atualizada.
<?php
add_filter(
'posts_where',
function (string $where, WP_Query $query ): string {
global $wpdb;
$todays_date = gmdate( 'Y-m-d H:i:s', strtotime( 'now') );
$four_weeks_ago = gmdate( 'Y-m-d H:i:s', strtotime( '-4 weeks') );
$prepend = $wpdb->prepare(
" AND {$wpdb->posts}.post_date > %s",
$four_weeks_ago
);
$prepend .= $wpdb->prepare(
" AND {$wpdb->posts}.post_date < %s",
$todays_date
);
return $prepend. $where;
}, 101, 2
);
O resultado dessa função é uma consulta modificada que restringe as postagens que são retornadas na data e hora especificadas. Ou seja, quatro semanas atrás até a hora, minuto e segundo.
Você pode alterar isso atualizando a -4 weeksstring passada para a strtotimefunção (mas eu recomendo revisar a página de manual do PHP vinculada abaixo para entender como essa função funciona com uma linguagem como esta).
Referências
[posts_where](https://developer.wordpress.org/reference/hooks/posts_where/)[WP_Query](https://developer.wordpress.org/reference/classes/wp_query/)[wpdb](https://developer.wordpress.org/reference/classes/wpdb/)[gmdate](https://www.php.net/manual/en/function.gmdate.php)[strtotime](https://www.php.net/manual/en/function.strtotime.php)