当WP_QUERY没有要显示的帖子时,对每个循环进行筛选

时间:2021-03-22 作者:NielsPilon

我正在寻找一种方法,当for each循环中的WP\\u查询没有结果时,可以根据自定义分类法过滤for each循环的结果。

更具体地说,我有一个带有自定义分类法的事件帖子类型。在页面上,我希望显示所有分类法,但仅当该分类法包含事件数据将来所在的事件时。事件日期是一个自定义字段(ACF)。

以下代码显示了所有分类法,即使WP\\u查询没有结果/将来该分类法现在有事件时也是如此。

<?php // Get all the categories
$categories = get_terms( \'soort-event\');

foreach ( $categories as $category ):

// Chech if event start date is in the future  
$meta_query = array(
            array(
                \'key\'     => \'datum_event\',
                \'value\'   => date(\'Ymd\'),
                \'type\'    => \'DATE\',
                \'compare\' => \'>\',
                )
            ); 
// Get all events
$events = new WP_Query(
    array(
            \'post_type\'       => \'events\',
            \'orderby\'         => \'meta_value_num\',
            \'order\'           => \'ASC\',
            \'posts_per_page\'  => \'3\',  
            \'tax_query\' => array(
            array(
                \'taxonomy\'  => \'soort-event\',
                \'terms\'     =>  $category,
                \'field\'     => \'term_id\'
            )
        ),             
            \'meta_query\'      => $meta_query
      )
 );

if($events -> have_posts()):?> 
?>
 
<section class="events">      

<h2><?php // Show the event taxonomy name
   echo $category->name;?></h2>

<div class="row events">

    <?php // Show the event details
    while ($events->have_posts()) : $events->the_post(); ?>
         
    <div class="event-meta">
 
        <?php the_title();?>

    </div>

    <?php // End  event loop 
    endwhile;?> 

</section>

<?php
// end Events loop
endif;
// end for each taxonomy loop
endforeach;
wp_reset_postdata();
?>
是否有方法过滤结果并隐藏没有事件的“空”分类法,其中事件日期在将来?

更新:更新代码并添加if语句以检查帖子。

1 个回复
SO网友:NielsPilon

添加if (has_posts() ) 解决了我忘记添加的问题。请参阅问题中的更新代码。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post