web-dev-qa-db-fra.com

Exclure le post par méta personnalisé avec pre_get_posts

Je crée une publication personnalisée pour un calendrier d'événements. My Custom Post a 2 champs méta personnalisés appelés "event_star_date" & "event_end_date". Je souhaite utiliser pre_get_posts pour exclure les événements pour lesquels leur "date_événement_événement" est inférieure à la date du jour OR "date_événement_événement" est vide et "date du début_événement" inférieure à la date de ce jour. J'ai vu des codes mais ils ne fonctionnent pas pour moi.

Grâce à @cybnet, j'ai obtenu le code dont j'ai besoin, mais l'acier ne fonctionne pas. Ce que je nedd pourrait être quelque chose comme ceci:

function bbwp_calendar_visible_events( $query ) {
if ( !is_admin() && $query->is_main_query() ){
    if ( is_post_type_archive( $postType ) ) {
            $meta_query = array(
            'relation' => 'OR',
            array(
                'relation' => 'AND',
                array(
                    'key'   => 'event_start_date',
                    'value' => current_time( 'timestamp' ),
                    'type' => 'CHAR',
                    'compare' => '>=',
                ),
                array(
                    'key'   => 'event_end_date',
                    'value' => '',
                    'type' => 'CHAR',
                    'compare' => '=',
                ),
            ),
            array(
                'key'   => 'event_end_date',
                'value' => current_time( 'timestamp' ),
                'type' => 'CHAR',
                'compare' => '>=',
            ),
        );

        $query->set( 'meta_query', $meta_query );
    }
}
}

add_action( 'pre_get_posts', 'bbwp_calendar_visible_events' );

Merci à tout le monde

1
Nasgor

Vous pouvez utiliser l'argument "meta_query" de la requête, je pense qu'il vaut mieux filtrer le post_where:

add_action( 'pre_get_posts', 'bbwp_calendar_visible_events' );
function bbwp_calendar_visible_events( $query ) {

    $postType = 'bbwp_calendar';

    if ( !is_admin() && $query->is_main_query() ){

        if ( is_post_type_archive( $postType ) ) {

            $meta_query = array(
                              'relation' => 'OR',
                              //current time <= event_end_date
                              array(
                                  'key'   => 'event_end_date',
                                   //Check https://codex.wordpress.org/Function_Reference/current_time
                                   //to return the current time (today) in the same format
                                   //you store the date in your custom field
                                  'value' => current_time( 'timestamp' ),
                                  'type' => 'DATETIME',
                                  'compare' => '<=',
                              ),
                              //event_end_date = ''
                              array(
                                  'key'   => 'event_end_date',
                                   //Check https://codex.wordpress.org/Function_Reference/current_time
                                   //to return the current time (today) in the same format
                                   //you store the date in your custom field
                                  'value' => "",
                                  'type' => 'DATETIME',
                                  'compare' => '=',
                              ),
                     );

            $query->set( 'meta_query', $meta_query );

         }
     }
} 

Plus d'informations:

1
cybmeta