【发布时间】:2020-07-27 07:20:59
【问题描述】:
我正在尝试根据一周中的周一至周日的 ACF 选择(多个)天数返回帖子类型。我使用 ACF 选择键 (show_days) 和当前日期的关系设置了一个元查询。 var_dump 显示两个数组正在相互比较,但仍未显示显示(帖子类型)。
<?php
$date = date('l');
$shows = get_field('station_shows', false, false);
$query = new WP_Query ( array(
'post_type' => 'shows',
'posts_per_page' => 1,
'post__in' => $shows,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array (
'key' => 'show_days',
'value' => array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),
'compare' => 'IN',
),
array (
'key' => 'date',
'value' => $date,
'compare' => '=',
'type' => 'DATE',
),
)));
if ( $query->have_posts() ) { while( $query->have_posts() ) {
$query->the_post();
echo '<div class="onAir"><h3>Currently On Air: ';
the_title();
if (get_field('dj', $query->ID)) {
$dj = get_field('dj');
echo ' w/ ';
echo $dj;
}
echo '</h3></div>';
} wp_reset_postdata();
}
?>
不知道是不是数据库元值不对应。我什至尝试过 unserialize() 数组,但它仍然返回相同的数组值。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
WP_Query 文档说“只有当日期以 YYYY-MM-DD 格式存储并使用此格式进行测试时,‘类型’DATE 才能与‘比较’值 BETWEEN 一起使用。”但 $date 总是返回星期几的名称(星期一、星期二等)。也许你应该换成
$date = date('Y-m-d')。 -
对。星期几的名称在 var_dump 中以 'Tuesday' (今天)的形式返回,它还表明该数组也在显示......所以周二播出的当前节目应该返回,但它没有。不过我会尝试更改格式。
-
这里是 var_dump:AND ( mt2.meta_key = 'show_days' AND mt2.meta_value IN ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday ','Sunday') ) AND ( mt3.meta_key = 'date' AND CAST(mt3.meta_value AS DATE) = '2020-04-14' ) )
-
meta_value 返回
2020-04-14,它确认了文档中描述的Y-m-d格式。你试过把第一行改成$date = date('Y-m-d')吗? -
是的,我就是这么做的。但是,show_days 将仅根据一周中的几天工作,而不是实际日期。 (周一至周五,周末)....例如,一个节目仅在每周四播出。所以我必须有实际的日子而不是 Y-m-d
标签: php wordpress advanced-custom-fields meta-query