问题是你传递了一个元VALUE 在key
的字段meta_query
...你应该通过你的metaKEY 有(“\\u wccf\\u pp\\u event\\u date”),如下所示:
$seasons = array (
\'spring\' => array (\'2017-03-21\', \'2017-06-20\'),
\'summer\' => array (\'2017-06-21\', \'2017-09-20\'),
\'fall\' => array (\'2017-09-21\', \'2017-12-20\'),
\'winter\' => array (\'2017-12-21\', \'2018-03-20\'),
) ;
foreach ($seasons as $season => $date_range) {
$args = array (
\'post_type\' => \'product\',
\'posts_per_page\' => -1,
\'meta_query\' => array (
array (
// the \'key\' should be the meta field, NOT a value you\'re looking for
// in that field
\'key\' => \'_wccf_pp_event_date\', //$event_date_query,
\'value\' => $date_range,
\'compare\' => \'BETWEEN\',
\'type\' => \'DATE\',
),
)
) ;
$query = new WP_Query ($args) ;
if ($query->has_posts ()) {
while ($query->has_posts ()) {
$query->the_post () ;
// do something with this post
}
}
else {
echo "no $season products" ;
}
}
编辑,回答评论中提出的问题:不是通过标准WP\\U查询
date_query
.
那里might 是一种连接到从meta_query
合并一个或多个MySQLDate and Time Functions (我会先看看get_meta_sql), 但我怀疑这些日期&;时间funcs甚至会这么做。
然而,总是有“暴力”的方式:
在post\\u meta中查找日期的最短/最长年份,从最小值迭代到最大值,执行meta_query
根据我的原始答案,合并在每个迭代中找到的帖子,如下所示:
$sql = "
SELECT YEAR(MIN(meta_value)), YEAR(MAX(meta_value))
FROM $wpdb->postmeta
WHERE meta_key = \'_wccf_pp_event_date\'
" ;
list ($min_year, $max_year) = array_map (\'intval\', $wpdb->get_row ($sql, ARRAY_N)) ;
for ($year = $min_year ; $year < $max_year ; $year++) {
// insert code from my 1st answer here, substituting $year into the dates in the $seasons array
// (remembering to increment $year by 1 when substituting into the end date for winter)
}
此外,分点/至点的日期每年都不同,这一点也很复杂(例如,有些年份的春季从3月20日开始,有些年份的春季从3月19日开始,等等)。然而,除非您的“产品”本质上是“天文数字”,否则您可能会忽略这一复杂性,而只是对任何一年使用相同的月/日值。