在while循环之后,限制if语句中的项目数

时间:2019-02-20 08:27:33

标签: php wordpress

我在wordpress中有一个定制的日历列表器,它获取定制帖子类型的事件,该事件具有一个带有事件日期的ACF字段,并将其与今天的日期进行比较以将其列出。我想将帖子数限制为5个,但是通过在while循环中过滤掉5个事件的逻辑,较旧的事件也会进入过滤器并计入5个,因此最后比较时也将它们计算在内在,例如。如果我有2个较旧的事件,则if语句中仅显示3个事件。 这是代码:

    $args = array( 
    'post_type' => 'events', 'meta_key'=>'date', 'orderby'=>'meta_value', 'order'=>'ASC', 'posts_per_page'=>5 );

$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); 

    $title = get_the_title();

    $maindate = DateTime::createFromFormat('Ymd', get_field('date'));
    $today = DateTime::createFromFormat('Ymd', date('Ymd'));

if ( $maindate >= $today ) :

... +然后是带有元素的html代码

有什么主意,我该如何重组它?

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您想列出5个即将发生的事件,而忽略旧的事件。现在,您可以在while循环中对其进行过滤,但可以在查询中更好地对其进行过滤。

ACF使用Wordpress元字段(请参见this link),因此您也可以在其中查询。这可以归结为这样:

$args = array( 
    'post_type' => 'events', 
    'meta_key'=>'date', 
    'meta_query' => [
        ['key' => 'date', 
         'value' => date('Y-m-d'), 
         'compare' => '>=']
     ],  
     'orderby'=>'meta_value', 
     'order'=>'ASC', 
     'posts_per_page'=>5 );