Buscar publicaciones de WordPress programáticamente por rango de fechas
TL; DR: El código compartido en esta publicación muestra cómo puede modificar la consulta que se ejecuta en la página Todas las publicaciones para que pueda limitar la forma en que busca publicaciones a un rango de fechas específico.
Ha pasado un tiempo desde la última vez que escribí sobre el uso del post_wherefiltro para modificar la consulta de búsqueda que se ejecuta en una página determinada, como el área Todas las publicaciones de WordPress. Pero dado el hecho de que hay una variedad de usos para recuperar publicaciones, y tipos de publicaciones personalizadas, de diferentes maneras, hay una variedad de formas de usar este filtro único.
Buscar publicaciones por intervalo de fechas
Para buscar publicaciones por rango de fechas, esto es lo que debe suceder:
- Registre una devolución de llamada con el
posts_wherefiltro, - Asegúrese de que la función acepte la cadena
wherey la instancia deWP_Queryque se está ejecutando en la página - Obtenga la fecha y hora de hoy y la fecha y hora de hace cuatro semanas
- Anteponer la
wherecláusula para restringir los resultados a la fecha returnla consulta actualizada.
<?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
);
El resultado de esta función es una consulta modificada que restringe las publicaciones que se devuelven en la fecha y hora especificadas. Es decir, hace cuatro semanas hasta la hora, el minuto y el segundo.
Puede cambiar esto actualizando la -4 weekscadena pasada a la strtotimefunción (pero recomiendo revisar la página del manual de PHP vinculada a continuación para comprender cómo funciona esta función con un lenguaje como este).
Referencias
[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)