Cerca in modo programmatico i post di WordPress per intervallo di date
TL; DR: Il codice condiviso in questo post mostra come puoi modificare la query che viene eseguita nella pagina Tutti i post in modo da poter limitare il modo in cui cerchi i post a un intervallo di date specificato.
È passato un po’ di tempo dall’ultima volta che ho scritto sull’utilizzo del post_wherefiltro per modificare la query di ricerca che viene eseguita su una determinata pagina, come l’ area Tutti i post di WordPress. Ma dato il fatto che ci sono una varietà di usi per recuperare i post – e tipi di post personalizzati – in modi diversi, c’è una varietà di modi per usare questo filtro singolo.
Cerca post per intervallo di date
Per cercare i post per intervallo di date, ecco cosa deve succedere:
- Registra una richiamata con il
posts_wherefiltro, - Assicurati che la funzione accetti la stringa
wheree l’istanzaWP_Queryin esecuzione sulla pagina - Ottieni la data e l’ora di oggi e la data e l’ora di quattro settimane fa
- Anteponi la
whereclausola per vincolare i risultati alla data returnla query aggiornata.
<?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
);
Il risultato di questa funzione è una query modificata che limita i post restituiti entro la data e l’ora specificate. Vale a dire, quattro settimane fa fino all’ora, minuto e secondo.
Puoi cambiarlo aggiornando la -4 weeksstringa passata alla strtotimefunzione (ma ti consiglio di rivedere la pagina di manuale PHP collegata di seguito per capire come funziona questa funzione con un linguaggio come questo).
Riferimenti
[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)