我运行一个旅行网站的旅程,其中有一个开始和结束日期。现在这些旅行一年可以有好几次。
现在我有一篇文章有三个重复的开始和结束日期
01.03.2015 - 14.03.2015 2015-03-01 - 2015-03-14
01.04.2015 - 14.04.2015 2015-04-01 - 2015-04-14
01.05.2015 - 14.05.2015 2014-05-01 - 2015-05-14
我想显示我的文章的开始和结束日期包含在搜索日期范围内。
搜索01.06.2015-01.07.2015不应返回任何结果。
搜索01.03.2015-01.04.2015应返回一个结果。
$reisen_query_args = array(
'post_type' => 'reisen',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'reisezeiten_%_start',
'compare' => '>=',
'value' => $startdate,
'type' => 'DATE'
),
array(
'key' => 'reisezeiten_%_end',
'compare' => '<=',
'value' => $enddate,
'type' => 'DATE'
)
)
这起到了一半的效果,我不明白为什么:
如果搜索范围为01.03.2015-10.03.2015(2015-03-01-2015-03-10),则不会显示正确的帖子
但是
如果范围是05.03.2015-16.03.2015(2015-03-05-2015-03-16),则会显示错误的帖子,因为搜索开始日期必须是01.03.2015(2015-03.01)或之前才能返回结果。
以及
只有当我有重复的字段时才会发生这种情况。只要只存储了一个日期2015年3月1日至2015年3月14日(2015年3月1日至2015年3月14日),查询就会按预期进行。
有人能帮我一下吗?我已经找了好几个星期了。
我的查询是这样的:
SELECT SQL_CALC_FOUND_ROWS wp410_posts.ID
FROM wp410_posts
INNER JOIN wp410_term_relationships
ON (wp410_posts.ID = wp410_term_relationships.object_id)
INNER JOIN wp410_postmeta
ON ( wp410_posts.ID = wp410_postmeta.post_id )
INNER JOIN wp410_postmeta AS mt1
ON ( wp410_posts.ID = mt1.post_id )
WHERE 1=1
AND ( wp410_term_relationships.term_taxonomy_id IN (29) )
AND wp410_posts.post_type = 'reisen'
AND ((wp410_posts.post_status = 'publish'))
AND ( ( wp410_postmeta.meta_key LIKE 'reisezeiten_%_start'
AND CAST(wp410_postmeta.meta_value AS DATE) >= '2015-03-02' )
AND ( mt1.meta_key LIKE 'reisezeiten_%_end'
AND CAST(mt1.meta_value AS DATE) <= '2015-03-14' ) )
GROUP BY wp410_posts.ID
ORDER BY wp410_posts.menu_order ASC
LIMIT 0, 6
最佳答案
问题是您的请求不知道reisezeiten_1_start
对应于reisezeiten_1_end
。所以它可以使用reisezeiten_2_start
和reisezeiten_1_start
作为例子。
您的范围:>=2015-03-05,您的数据:
2015-03-01 - 2015-03-14
2015-04-01 - 2015-04-14
2014-05-01 - 2015-05-14
你的要求是“我想要一个开始日期大于2015-03-05,结束日期小于2015-03-16的职位”
所以:
2015-03-01 - 2015-03-14 => ending date correponds to your range
2015-04-01 - 2015-04-14 => start date corresponds to your range
2014-05-01 - 2015-05-14
因此您对两个meta_键的比较是有效的,并返回post。这就解释了为什么代码只使用一个日期。
就像马特说的。c,一个解决方案是在meta_query数组中使用多个项(就像他说的:如果有无限行,它就不起作用)
$reisen_query_args = array(
'post_type' => 'reisen',
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => 'reisezeiten_1_start',
'compare' => '>=',
'value' => $startdate,
'type' => 'DATE'
),
array(
'key' => 'reisezeiten_1_end',
'compare' => '<=',
'value' => $enddate,
'type' => 'DATE'
)
),
array(
'relation' => 'AND',
array(
'key' => 'reisezeiten_2_start',
'compare' => '>=',
'value' => $startdate,
'type' => 'DATE'
),
array(
'key' => 'reisezeiten_2_end',
'compare' => '<=',
'value' => $enddate,
'type' => 'DATE'
)
),
array(
'relation' => 'AND',
array(
'key' => 'reisezeiten_3_start',
'compare' => '>=',
'value' => $startdate,
'type' => 'DATE'
),
array(
'key' => 'reisezeiten_3_end',
'compare' => '<=',
'value' => $enddate,
'type' => 'DATE'
)
)
)
)
小心,此代码仅适用于wp 4.1+
参见codex了解更多信息(段落末尾)
关于ACF website的一些帮助
(对不起我的英语)
关于php - Wordpress-ACF-获取具有重复开始和结束日期的帖子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28696260/