meta_query, how to search using both relation OR & AND?

Angelica Santibanez picture Angelica Santibanez · Aug 23, 2013 · Viewed 55.9k times · Source

Resolved: See answer below.


I have a custom post type called BOOKS. It has several custom fields, named: TITLE, AUTHOR, GENRE, RATING. How do I fix my meta_query code below so that only books that have the search word in the custom fields: title, author, genre WITH EXACTLY the rating specified in my search form, gets displayed in the results?

I have made a custom search form; a text area that will search through the title, author and genre; and a dropdown that will search for the rating. The meta_query I made below only searches through the title, author, and genre. But I am now stumped in how to add the code for the rating.

This is how I visually imagined it with meta_query relation: (title OR author OR genre) AND rating

$args = array(
        'relation' => 'OR',
          array(
             'key' => 'title',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'author',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'genre',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
), 
        array(
        'relation' => 'AND', 
          array(
             'key' => 'rating',
             'value' => $ratingvalue,
             'compare' => '=',
             'type' => 'NUMERIC'
          ));

I would extremely appreciate your help and advice.

Answer

Angelica Santibanez picture Angelica Santibanez · Aug 24, 2013

I found the solution with some help. The code below worked perfectly.

    $args => array(
        'relation' => 'AND',
        array(
            'relation' => 'OR',
            array(
                'key' => 'title',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'author',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'genre',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            )
        ),
        array(
            'key' => 'rating',
            'value' => $ratingvalue,
            'compare' => '=',
            'type' => 'NUMERIC'

        )
    )
);