可以包含子查询组的元查询吗?

时间:2014-11-19 作者:Stephen

我已经搜索了所有论坛和WP文档,但找不到WP元查询是否允许子元查询的答案。我的问题是:我有很多类型的促销(自定义帖子类型),有开始日期和结束日期(在db中存储为unixtime)。我想排除一种类型的促销(“墙”,效果很好),并且(使用或用于任何一种情况)排除开始日期和结束日期(如果存在)在过去的项目。这是我的代码:

$nowtime = time();
$the_query = new WP_Query( array(
\'post_type\' => \'promos\', \'orderby\' => \'menu_order\', \'order\' => \'ASC\', \'meta_query\' => array(
    \'relation\' => \'OR\',
array(
    \'key\'     => \'wpcf-type-of-promo\',
    \'value\'   => \'walls\',
    \'compare\' => \'NOT LIKE\'
),
array(
\'relation\' => \'AND\',
array(
    \'key\'     => \'wpcf-date-and-time-start\',
    \'value\'   => $nowtime,
    \'compare\' => \'<\',
    \'type\' => \'NUMERIC\'
),
array(
    \'key\'     => \'wpcf-date-and-time-end\',
    \'value\'   => $nowtime,
    \'compare\' => \'<\',
    \'type\' => \'NUMERIC\'
))
) ));
对于上述代码,promo类型的“walls”被正确过滤掉,但子查询中的开始日期和结束日期被完全忽略。

2 个回复
SO网友:shanebp

我认为你不需要relation 参数默认为AND.

    $nowtime = time();
    $the_query = new WP_Query( array(
     \'post_type\' => \'promos\', 
     \'orderby\' => \'menu_order\', 
     \'order\' => \'ASC\', 
     \'meta_query\' => array(
         array(
          \'key\'     => \'wpcf-type-of-promo\',
          \'value\'   => \'walls\',
          \'compare\' => \'NOT LIKE\'
         ),
        array(
          \'key\'     => \'wpcf-date-and-time-start\',
          \'value\'   => $nowtime,
          \'compare\' => \'<\',
          \'type\' => \'NUMERIC\'
        ),
        array(
          \'key\'     => \'wpcf-date-and-time-end\',
          \'value\'   => $nowtime,
          \'compare\' => \'<\',
          \'type\' => \'NUMERIC\'
        )
     )
   ));

SO网友:Stephen

我有一个这样的解决方法:

我运行上面的查询,只对类型和结束日期进行筛选,这在一定程度上减少了返回的集。

然后,在我的循环中,我添加了一些PHP逻辑,基本上说:

如果((结束日期不为空)和(结束日期小于现在)以及(开始日期小于现在))不执行任何操作。否则,请显示帖子。

目前这是可行的,但如果有一个查询能够从一开始就准确返回我想要的内容,那就太好了。

结束

相关推荐