我有一个奇怪的情况,我有两个元键在我的自定义帖子。开始日期和结束日期,
在简单SQL中,我想执行以下查询
where startDate > \'2013-12-10\' and (startDate <= \'2013-12-10\' and endDate >= \'2013-12-10\')
我基本上是寻找的职位之间的startDate和endDate范围,并应显示进一步的职位也。
我尝试过此代码,不知道是否正确,但尝试过,没有抛出任何错误:
$args = array(
\'posts_per_page\' => 100,
\'post_type\' => \'create_events\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'startDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>\'
),
array(
\'relation\' => \'AND\',
array(
\'key\' => \'startDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'<=\'
),
array(
\'key\' => \'endDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>=\'
),
),
\'orderby\' => \'meta_value\',
\'meta_key\' => \'startDate\',
\'order\' => \'DESC\'
)
);
query_posts($args);
可能是我的逻辑错了,
SO网友:s_ha_dum
首先,样本WHERE
您提供的条款没有意义。这不是如何编写返回“介于startDate和endDate之间”的查询。其次
我基本上是寻找的职位之间的startDate和endDate范围,并应显示进一步的职位也。
现在还不清楚你所说的“显示更多帖子”是什么意思,但对我来说唯一有意义的是,你想显示超出你范围的帖子——大概是大于startDate
就像你那令人困惑的样本的第一条一样WHERE
. 在这种情况下,您只需要:
$args = array(
\'posts_per_page\' => 100,
\'post_type\' => \'create_events\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'startDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>\'
),
),
\'orderby\' => \'meta_value\',
\'meta_key\' => \'startDate\',
\'order\' => \'DESC\'
)
);
你是对的,你试图使用的论点不起作用。
WP_Query
没有那么复杂的逻辑,但正如我所说,你的样本
WHERE
没有道理。把它画在一条数字线上,你就会明白我的意思了。
(startDate <= \'2013-12-10\' and endDate >= \'2013-12-10\')
与你的英语描述要求的几乎相反。
而且
Please don\'t use query_posts
.
应该注意的是,使用此
replace the main query 在页面上可以
increase page loading times, 在最坏的情况下
more than
doubling the amount of work needed or more. 虽然易于使用,但该功能
prone to confusion and problems 过后有关详细信息,请参阅下面关于注意事项的注释。
http://codex.wordpress.org/Function_Reference/query_posts (重点矿山)
SO网友:Nicolai Grossherr
您的逻辑是错误的,因为您查找的帖子的开始日期大于,同时小于或等于今天的开始日期,所以除非有一个事件的开始日期是今天,否则您不会得到结果。除此之外你的meta_query
是错误的,此外,您必须更改开始/结束日期比较,并且不要将这些日期与相同的日期进行比较,最后但并非最不重要的是不要使用query_posts()
使用WP_Query
相反
$args = array(
\'posts_per_page\' => 100,
\'post_type\' => \'create_events\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'startDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>=\'
),
array(
\'key\' => \'endDate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'<=\'
),
\'orderby\' => \'meta_value\',
\'meta_key\' => \'startDate\',
\'order\' => \'DESC\'
)
);
$custom_query = new WP_Query( $args );