web-dev-qa-db-fra.com

Afficher uniquement les publications avec la date d'aujourd'hui ou dans le futur (c'est-à-dire ne pas afficher les publications précédentes)?

Est-il possible d'afficher uniquement les publications qui ont une date actuelle ou dans le futur? Je ne veux pas montrer les messages qui sont dans le passé.

De plus, je souhaite que la liste affiche les publications qui ont une date future, comme dans le système de gestion de contenu qu'il affiche comme prévu.

Voici ma boucle:

<div class="news-content" style="background-color:#feefe7!IMPORTANT;">
  <div class="page-title-content">
    <h2><?php echo the_title(); ?></h2>
  </div>
  <div class="news-content-inner">
    <?php $portfolioloop = new WP_Query(array(
    'paged'          => get_query_var('paged'),
    'post_type'      => 'news',
    'posts_per_page' => 4,
    'tax_query'      => array(
        array(
        'taxonomy' => 'news',
        'field'    => 'id',
        'terms'    => 51,
        ),
        ),
    )); ?>
    <?php while ( $portfolioloop->have_posts() ) : $portfolioloop->the_post(); ?>
    <div class="news-item" onClick="location.href='<?php echo the_permalink(); ?>'">
      <h2><a style="color:#F45B11!IMPORTANT;" href="<?php echo the_permalink(); ?>"><?php echo the_time('d.m.Y'); ?> / <?php echo the_title(); ?></a></h2>
      <p class="news-page">
        <?php if (get_field('description') != "") { ?>
        <?php echo the_field('description'); ?>
        <?php } else { 
        $newscontent = get_the_content();
        $newscontent_str = strip_tags($newscontent, '');
        echo substr($newscontent_str,0,250) . "…";
        } ?>
      </p>
    </div>
    <?php endwhile; // end of the loop. ?>
    <p class="news-page" style="font-size:12px!IMPORTANT;"><?php echo $portfolioloop->post_count; ?> opportunities</p>
    <?php if (function_exists('wp_pagenavi')) {
    wp_pagenavi( array( 'query' => $portfolioloop ) ); } ?>
  </div>
</div>
1
Rob

Je ne peux pas croire que je n'ai pas vu cela plus tôt, j'ai simplement résolu le problème dans la requête:

'post_status' => 'future'

Donc, une fois publié, il disparaît de la liste.

1
Rob

Comme décrit ici , vous pouvez ajouter un filtre supplémentaire à votre requête.

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    $where .= " AND DATE(post_date) >= DATE(NOW())";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Dans votre cas, cela signifie ce qui suit:

<?php
 // Create a new filtering function that will add our where clause to the query
 function filter_where( $where = '' ) {
    $where .= " AND DATE(post_date) >= DATE(NOW())";
    return $where;
 }

 add_filter( 'posts_where', 'filter_where' );
 $portfolioloop = new WP_Query(array(
    'paged'          => get_query_var('paged'),
    'post_type'      => 'news',
    'posts_per_page' => 4,
    'tax_query'      => array(
        array(
        'taxonomy' => 'news',
        'field'    => 'id',
        'terms'    => 51,
        ),
        ),
    )); 
 remove_filter( 'posts_where', 'filter_where' );
?>
0
Thomas