web-dev-qa-db-fra.com

Afficher uniquement les résultats de la recherche avec si la date actuelle est comprise entre deux dates?

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: 15391296001546214400

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?

1
joq3

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' );
1