WordPress:使用meta_queries对多个帖子类型进行单个查询?

时间:2018-06-29 20:46:22

标签: php wordpress

我正在尝试在WordPress中设置查询,以返回来自不同帖子类型的组合结果,以及适用于每种帖子的met​​a_queries。在这种情况下,我希望获取标准帖子,其相应的meta_query(自定义字段)为'related_'.$post_type',以及{em之后的event自定义帖子类型 当前日期。我的查询如下,虽然似乎可以正确获取标准帖子,但它显示的是所有事件,而不仅仅是即将发生的事件:

$args = array(
            'post_type' => array('post', 'event'),
            'orderby' => 'date',
            'order' => 'DESC',
            'posts_per_page'    =>  $limit,
            'meta_query' => array(
                'relation' => 'OR',
                array(
                    'key' => 'related_'.$post_type,
                    'value' => $post_id,
                    'compare' => 'LIKE',
                ),
                array(
                    'key'     => 'event_start_date',
                    'type'    => 'DATE',
                    'value'   => current_time('Ymd'),
                    'compare' => '>=',
                ),
            )
        );

这是可以在单个查询中完成的吗,还是需要对带有相应meta_queries的帖子和事件进行单独的查询,并合并结果数组?还是可以更好地组织查询以使每个meta_query与其各自的帖子类型对齐?感谢您的协助。

2 个答案:

答案 0 :(得分:1)

您可以查询多种帖子类型:

post_type (string / array) - use post types. Retrieves posts by Post Types, default value is 'post'. If 'tax_query' is set for a query, the default value becomes 'any';

编辑:我有一种感觉,您应该使用YYYY-MM-DD mysql日期格式,但是您是对的-current_time()接受Ymd之类的PHP日期格式(同样为'mysql''timestamp')。

查询的结构看起来很好-对我来说唯一奇怪的是您的'related _'。$ post_type自定义字段的值:

'key' => 'related_'.$post_type,
'value' => $post_id,

post_id实际上是自定义字段的值吗? postmeta表由以下内容组成:

meta_id
post_id
meta_key
meta_value

post_id通常也不是meta_value吗?

答案 1 :(得分:1)

我遇到了同样的问题。将meta_query参数应用于具有多个post_types的查询时,meta_query参数将应用于所有帖子类型,因此,它仅返回包含所查询元字段的帖子。

例如,在执行带有以下wp_query自变量的meta_query时:

'meta_query' => array(
   array(
      'key' => 'agenda_date',
      'value' => date('Ymd'),
      'compare' => '>=',
   ),
)

仅返回post_type中包含元字段“ agenda_date”的帖子。其他所有帖子都将被忽略。

如果删除了meta_query参数,那么所有参数都可以正常工作,并且可以毫无问题地查询多种帖子类型('post_type' => 'agenda,post')。

摆弄relation设置并模拟伪造的meta_query参数似乎不起作用,因此唯一的解决方案是劫持SQL查询本身并修改JOINWHERE条查询语句。

可惜的是。