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