我有一个叫做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; ?>
答案 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(也是自定义字段页面上的一个选项)