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

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?

Read More

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.

Related posts

Leave a Reply

2 comments

  1. 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'
    
            )
        )
    );
    
  2. After a bit trial and error I find a solution to this. This is logical I mean meta_query does not supports the array for field “key”, but giving the array in “key”, I’m getting the perfect solution. I may be sound crazy but it’s working like charm.

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

    You only get a warning for “trim()” as we are passing an array instead of a string. Suppress that warning or Please add something if you find a better solution.