Wordpress-WP查询:meta_query关系被忽略

时间:2019-01-08 22:01:40

标签: wordpress arguments meta-query

我需要有关WP_Query的帮助。我使用了具有OR和AND关系的meta查询参数,但是在查询结果中似乎忽略了该参数。

这是我的代码:

$args = array(
    'orderby'           => 'date',
    'order'             => 'DESC',
    'post_type'         => 'my_custome_post_type',
    'posts_per_page'    => 1,
    'meta_query'        => array(
        'relation' => 'OR',
            array(
                'relation' => 'AND',
                array( 'author'     => $contact_id ),
                array( 'meta_key'   => 'my_meta', 'meta_value' => $user_id )
            ),
            array(
                'relation' => 'AND',
                array( 'author'     =>  $user_id ),
                array( 'meta_key'   => 'my_meta', 'meta_value' => $contact_id )  
            )
    )
);

$query = new \WP_Query( $args );
$response = $query->posts;

我已经尝试添加here中建议的参数:

'suppress_filters'     => false,
'is_your_custom_query' => true, // your custom flag

即使我将$user_id$contact_id的值直接用任何数字替换在查询中,查询仍然返回相同的结果。我不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

谢谢您的帮助!

根据 dafoxuk 的建议,我必须将meta_key替换为key,并将meta_value替换为value。我还必须添加'compare' => 'LIKE'

但是在这种情况下,它没有用。我还必须将author_id存储在post_meta中,并通过以下方式更改array( 'author'=> $contact_id )的条件:

array( 'key '   => 'meta_author_id', 'value' => $user_id, 'compare' => 'LIKE' )

因此,最终的$args数组如下所示:

 $args = array(
            'orderby'           => 'date',
            'order'             => 'DESC',
            'post_type'         => 'my_custome_post_type',
            'posts_per_page'    => 1,
            'meta_query'        => array(
                'relation' => 'OR',
                    array(
                        'relation' => 'AND',
                            array( 'key '   => 'meta_author_id', 'value' => $user_id, 'compare' => 'LIKE' )
                            array( 'key '   => 'my_meta', 'value' => $user_id, 'compare' => 'LIKE '
                   array(
                        'relation' => 'AND',
                            array( 'key '   => 'meta_author_id', 'value' => $user_id, 'compare' => 'LIKE' )
                            array( 'key '   => 'my_meta', 'value' => $contact_id, 'compare' => 'LIKE' )
                    )
        );