Custom Field Multiple Clauses

时间:2013-12-10 作者:Niraj Chauhan

我有一个奇怪的情况,我有两个元键在我的自定义帖子。开始日期和结束日期,

在简单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);
可能是我的逻辑错了,

2 个回复
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 );

结束

相关推荐