Search code examples
wordpressargumentsmeta-query

Wordpress - WP Query : meta_query relation ignored


I need help with a WP_Query. I use the meta query argument using the OR and AND relations, but this argument seems to be ignored in the result of the query.

Here is my code :

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

I already tried to add this argument like suggested in here:

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

Even if I remplace the value of $user_id and $contact_id directly in the query with any number, the query still return the same result. I don't understand why it's not working.


Solution

  • Thank you for your help !

    As suggested by dafoxuk, I have to remplace meta_key by key and meta_value by value. I also had to add 'compare' => 'LIKE'.

    But event in this case it wasn't working. I also had to stock the author_id in a post_meta, and change the array( 'author'=> $contact_id ) condition by :

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

    So the final $args array look like this :

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