Wordpress - WP Query: отношение meta_query игнорируется - PullRequest
0 голосов
/ 09 января 2019

Мне нужна помощь с WP_Query. Я использую аргумент мета-запроса, используя отношения OR и AND, но этот аргумент, кажется, игнорируется в результате запроса.

Вот мой код:

$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;

Я уже пытался добавить этот аргумент, как предложено в здесь :

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

Даже если я заменим значения $user_id и $contact_id непосредственно в запросе на любое число, запрос все равно выдаст тот же результат. Я не понимаю, почему это не работает.

1 Ответ

0 голосов
/ 09 января 2019

Спасибо за вашу помощь!

В соответствии с предложением 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' )
                    )
        );
...