Php 根据ACF日期字段值筛选自定义帖子类型

Php 根据ACF日期字段值筛选自定义帖子类型,php,wordpress,loops,while-loop,advanced-custom-fields,Php,Wordpress,Loops,While Loop,Advanced Custom Fields,我有一个名为“事件”的自定义帖子类型。所有这些事件页面都有一个ACF日期字段,用于输入事件开始日期。在事件存档页面中,我想将这些事件分为两组 即将到来的事件-根据当前日期检查事件日期 已完成事件-过去的事件 因此,即将到来的活动将是这样的: <?php $today = date('Ymd'); $args = array( 'post_type' => 'events', 'nopaging' => true,

我有一个名为“事件”的自定义帖子类型。所有这些事件页面都有一个ACF日期字段,用于输入事件开始日期。在事件存档页面中,我想将这些事件分为两组

  • 即将到来的事件-根据当前日期检查事件日期
  • 已完成事件-过去的事件
  • 因此,即将到来的活动将是这样的:

    <?php
        $today = date('Ymd');
        $args = array(
            'post_type'     => 'events',
            'nopaging'      => true,
            'orderby'       => 'meta_value_num',
            'meta_key'      => 'event_start_date', //ACF date field
        );
        $upcoming_events = new WP_Query( $args );
        if ( $upcoming_events->have_posts() ) :
    ?>
    <h2>Upcoming Events</h2>
    <ul>
    
    <?php while ( $upcoming_events->have_posts() ) : $upcoming_events->the_post(); ?>
    
    <li>
        Title: <?php the_title(); ?><br>
        Date: <?php echo get_field('event_start_date'); ?>
    </li>
    
    <?php endwhile; wp_reset_postdata(); ?>
    
    </ul>
    <?php endif; ?>
    

    但我不确定如何将事件日期与当前日期进行比较。任何帮助都将不胜感激。

    在@Wilco的帮助下,我设法解决了这个问题。所以我把答案贴在这里,以防其他人也面临同样的问题

    <?php
        $today = date('Ymd');
        $args = array(
            'post_type'     => 'events',
            'nopaging'      => true,
            'orderby'       => 'meta_value_num',
            'meta_key'      => 'event_start_date', //ACF date field
            'meta_query'    => array( array(
                'key' => 'event_start_date', 
                'value' => $today, 
                'compare' => '>=', 
                'type' => 'DATE'
            ))
        );
        $upcoming_events = new WP_Query( $args );
        if ( $upcoming_events->have_posts() ) :
    ?>
    <h2>Upcoming Events</h2>
    <ul>
    
    <?php while ( $upcoming_events->have_posts() ) : $upcoming_events->the_post(); ?>
    
    <li>
        Title: <?php the_title(); ?><br>
        Date: <?php echo get_field('event_start_date'); ?>
    </li>
    
    <?php endwhile; wp_reset_postdata(); ?>
    
    </ul>
    <?php endif; ?>
    
    
    即将举行的活动
    
    • 标题:
      日期:

    回答这里-有更多关于meta_查询的详细信息。

    在@Wilco的帮助下,我设法解决了这个问题。所以我把答案贴在这里,以防其他人也面临同样的问题

    <?php
        $today = date('Ymd');
        $args = array(
            'post_type'     => 'events',
            'nopaging'      => true,
            'orderby'       => 'meta_value_num',
            'meta_key'      => 'event_start_date', //ACF date field
            'meta_query'    => array( array(
                'key' => 'event_start_date', 
                'value' => $today, 
                'compare' => '>=', 
                'type' => 'DATE'
            ))
        );
        $upcoming_events = new WP_Query( $args );
        if ( $upcoming_events->have_posts() ) :
    ?>
    <h2>Upcoming Events</h2>
    <ul>
    
    <?php while ( $upcoming_events->have_posts() ) : $upcoming_events->the_post(); ?>
    
    <li>
        Title: <?php the_title(); ?><br>
        Date: <?php echo get_field('event_start_date'); ?>
    </li>
    
    <?php endwhile; wp_reset_postdata(); ?>
    
    </ul>
    <?php endif; ?>
    
    
    即将举行的活动
    
    • 标题:
      日期:

    回答这里-有更多关于meta_查询的详细信息。

    你可能想看看这个问题。你也可以得到完整的事件列表,用PHP将它们分割成单独的数组,然后循环。你可能想看看这个问题,你也可以得到完整的事件列表,并将它们分割成使用PHP分离数组,然后循环它们。