WP_Query:meta_query中的第二个参数被忽略

时间:2018-07-03 14:07:45

标签: php mysql wordpress

此查询中的第二个meta_query参数被忽略。

$query = new WP_Query(array(
        'post_type' => 'events',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key'     => 'event_date',
                'value'   => date('Ymd'),
                'compare' => '>=',
            ),
            array(
                'key'     => 'end_date',
                'value'   => date('Ymd'),
                'compare' => '>=',
            )
        )
    ));

结果SQL中没有提到end_date

SELECT SQL_CALC_FOUND_ROWS inx9uju_posts.ID
FROM inx9uju_posts
INNER JOIN inx9uju_postmeta ON ( inx9uju_posts.ID = inx9uju_postmeta.post_id )
INNER JOIN inx9uju_postmeta AS mt1 ON ( inx9uju_posts.ID = mt1.post_id )
WHERE 1=1
AND ( inx9uju_postmeta.meta_key = 'event_date' AND ( mt1.meta_key = 'event_date' AND CAST(mt1.meta_value AS SIGNED) > '20180703' ) )
AND inx9uju_posts.post_type = 'events'
AND (inx9uju_posts.post_status = 'publish'
OR inx9uju_posts.post_status = 'acf-disabled'
OR inx9uju_posts.post_status = 'private')
GROUP BY inx9uju_posts.ID
ORDER BY inx9uju_postmeta.meta_value+0 ASC LIMIT 0, 30

我花了一些时间检查语法和引用法典,但是我看不出我的代码有什么问题。我看不出有什么理由会忽略end_date参数的meta_query部分。

更新

在这种特殊情况下,我在一个单独的函数中覆盖了查询的meta_query部分,该函数挂接到pre_get_posts中。更新该功能后,问题就解决了。

1 个答案:

答案 0 :(得分:0)

如果将其存储为AFC,则必须使用Ymd(20180703)的ACF语法。

您还必须意识到WordPress可以像这样检测到detect two dates的meta_compare之间。