J'ai un type d'article personnalisé pour lequel je peux définir une date de début et une date de fin dans les métadonnées.
J'utilise la fonction ci-dessous pour filtrer les résultats de la recherche et n'afficher que les résultats du type de message visitor
:
function SearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'visitor');
}
return $query;
}
add_filter('pre_get_posts', 'SearchFilter');
J'ai deux champs de métadonnées qui contiennent une date de début et une date de fin:
get_post_meta( get_the_ID(), 'visitor-start-date', true ); // Start date
get_post_meta( get_the_ID(), 'visitor-date', true ); // End date
Je souhaite filtrer les résultats de la recherche pour afficher uniquement les résultats si la date du jour (aujourd'hui) se situe entre ces deux dates. Les dates sont en Epoch/unix
et se présentent ainsi: 1539129600
1546214400
Comment puis-je l'inclure dans le filtre que j'ai créé ci-dessus pour afficher uniquement les résultats où la date du jour se situe entre la date de début et la date de fin?
Vous pouvez utiliser des méta-requêtes pour filtrer les publications en fonction de vos besoins.
Voici un exemple de code:
function SearchFilter( $query ) {
if ( !is_admin() && $query->is_search ) {
$query->set( 'post_type', 'visitor' );
$query->set( 'meta_query', array(
'relation' => 'AND',
array(
'key' => 'visitor-start-date',
'value' => time(),
'compare' => '<='
),
array(
'key' => 'visitor-date',
'value' => time(),
'compare' => '>='
),
) );
}
}
add_action( 'pre_get_posts', 'SearchFilter' ); // pre_get_posts is an action, not a filter, so you don't have to return anything in it
Si vous voulez l'heure du serveur, utilisez alors la fonction time
comme dans le code ci-dessus.
Par contre, si vous devez utiliser WP time dans les comparaisons, utilisez la fonction current_time
:
current_time( 'timestamp' );