WordPress WP_Query where clause with OR?

hello friends this is my args for WP_Query.

$args = array('post_type' => 'job_listing');
$args['meta_query']=array(
   'relation' => 'OR',
    array(
        'key' => 'app_trailer-type',
        'value' => $job_tailor,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'app_pay-type',
        'value' => $app_pay_type,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_address',
        'value' => $geo_address,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_country',
        'value' => $geo_country,
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'geo_short_address',
        'value' => $geo_short_address,
        'compare' => 'LIKE'
    ),
);

this is return query like.

Read More
SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id)
INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id) WHERE 1=1  AND wp_posts.post_type = 'job_listing' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'expired' OR wp_posts.post_status = 'tr_pending' OR wp_posts.post_status = 'tr_failed' OR wp_posts.post_status = 'tr_completed' OR wp_posts.post_status = 'tr_activated' OR wp_posts.post_status = 'private') AND ( (wp_postmeta.meta_key = 'app_trailer-type' AND CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Flatbed%')
AND  (mt1.meta_key = 'app_pay-type' AND CAST(mt1.meta_value AS CHAR) LIKE '%Per Week%')
AND  (mt2.meta_key = 'geo_address' AND CAST(mt2.meta_value AS CHAR) LIKE '%Davenport%')
AND  (mt3.meta_key = 'geo_country' AND CAST(mt3.meta_value AS CHAR) LIKE '%United States%')
AND  (mt4.meta_key = 'geo_short_address' AND CAST(mt4.meta_value AS CHAR) LIKE '%Davenport%') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

i required query that query like.

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id)
INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id) WHERE 1=1  AND wp_posts.post_type = 'job_listing' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'expired' OR wp_posts.post_status = 'tr_pending' OR wp_posts.post_status = 'tr_failed' OR wp_posts.post_status = 'tr_completed' OR wp_posts.post_status = 'tr_activated' OR wp_posts.post_status = 'private') AND ( (wp_postmeta.meta_key = 'app_trailer-type' OR CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Flatbed%')
OR  (mt1.meta_key = 'app_pay-type' AND CAST(mt1.meta_value AS CHAR) LIKE '%Per Week%')
OR  (mt2.meta_key = 'geo_address' AND CAST(mt2.meta_value AS CHAR) LIKE '%Davenport%')
OR  (mt3.meta_key = 'geo_country' AND CAST(mt3.meta_value AS CHAR) LIKE '%United States%')
OR  (mt4.meta_key = 'geo_short_address' AND CAST(mt4.meta_value AS CHAR) LIKE '%Davenport%') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

please help.

Related posts

Leave a Reply

4 comments

  1. For the OR Query argument array should be like this:

    $args = array(
        'post_type' => 'post',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key' => 'app_trailer-type',
                'value' => $job_tailor,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'app_pay-type',
                'value' => $app_pay_type,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'geo_address',
                'value' => $geo_address,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'geo_country',
                'value' => $geo_country,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'geo_short_address',
                'value' => $geo_short_address,
                'compare' => 'LIKE'
            ),
        )
    );
    

    Reference: http://codex.wordpress.org/Class_Reference/WP_Query

  2. changed args with like.

    $args = array('post_type' => 'job_listing', 'relation' => 'OR');
    $args['meta_query']=array(
        array(
            'key' => 'app_trailer-type',
            'value' => $job_tailor,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'app_pay-type',
            'value' => $app_pay_type,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_address',
            'value' => $geo_address,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_country',
            'value' => $geo_country,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'geo_short_address',
            'value' => $geo_short_address,
            'compare' => 'LIKE'
        ),
    );
    
  3. You may try something like this

    $args = array(
        'post_type' => 'job_listing',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key' => 'app_trailer-type',
                'value' => $job_tailor,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'app_pay-type',
                'value' => $app_pay_type,
                'compare' => 'LIKE'
            ),
            // ....
        )
    );
    

    Read more on Codex.

  4. From the WP_Query Class Reference (link):

    Important Note: tax_query takes an array of tax query arguments arrays
    (it takes an array of arrays) – you can see this in the second example
    below. This construct allows you to query multiple taxonomies by using
    the relation parameter in the first (outer) array to describe the
    boolean relationship between the taxonomy queries.

    You should add an array('relation' => 'OR') to the beginning of your meta_query array.