ACF关系字段:基于嵌套条件的父条件

时间:2019-06-15 15:01:18

标签: php conditional-statements advanced-custom-fields

我有一个叫做Classs的CPT。通过“ ACF关系”字段,我允许我的客户手动选择要显示在前端的课程。每个课程都有一个有效期。

在foreach语句中,我设置了一个条件,该条件将当前日期与到期日期进行比较,并且仅显示即将到来的课程。我需要的是在所有选定的班级都超过其过期日期之后,显示一条便条纸,上面写着“没有即将上课的班级”。

ACF支持建议在foreach循环中添加一个增量运算符,然后检查该值是否为空。他们修改了我的代码,如下所示,但没有完成。 ACF支持提供的其他帮助不在其提供的服务范围内,因此我在此处发布以获取指导。谢谢!

<?php 
    $all_classes = get_sub_field('class');
    if( $all_classes ):
?>

    <?php
        $i = 0;
        foreach($all_classes as $post):
        setup_postdata($post);
    ?>

        <?php
            $now = time(); // get today's date
            $expiry_date = strtotime(get_field('class-expiry-date')); // get the expiration date
            if ($now < $expiry_date): // compare the dates and show upcoming classes only
            $i++;
        ?>

            class details

        <?php endif; ?>

    <?php
        endforeach;
        wp_reset_postdata();
    ?>

<?php else: ?>

    <?php
        //check if $i is empty
        if(empty($i)):
    ?>

        There are no upcoming classes.

    <?php endif; ?>

<?php endif; ?>

1 个答案:

答案 0 :(得分:0)

我遇到了很多次。我的方法有些不同。是使用普通的WP_Query()并确保ACF关系后对象字段未将选择的项目保存为后对象,而是另存为后ID 。 (这只是在自定义字段页面上选择的选项)。通过这种方式,我可以利用本地的Wordpress元查询

我的args数组如下,使查询可以在比今天更新的特定日期字段上进行排序。

 $args = array(
    'post_type'       => 'class', /* (your CPT slug: class or classes) */
    'posts_per_page'  => -1,
    'meta_key'        => 'class-expiry-date',
    'orderby'         => 'meta_value',
    'order'           => 'ASC',
    'post__in'        => array( get_sub_field( 'class' ) ),     
    'meta_query'      => array(
      array(
        'key'     => 'class-expiry-date',
        'value'   => date('Ymd', strtotime('now')),
        'type'    => 'date',
        'compare' => '>=',
      )
    )
  );

  $wp_query = new WP_Query( $args );

  if( $wp_query->have_posts() ) {
    while( $wp_query->have_posts() ) {
      $wp_query->the_post();
      // Upcoming classes !!
      // echo $post->post_title (example)
    }
  } else {
    // There are no upcoming classes
  }

  wp_reset_query();
  

确保您在下面输出自定义到期日期字段   格式化Ymd(也是自定义字段页面上的一个选项)