0

I have a need to create "OR" relation between args['s'] and args['meta_query']. When I define

'relation' => "OR" within the list of arrays it still generates the sql with AND relation.

Code snippet is following

   if( isset($_GET['resume_search_keyword']) && $_GET['resume_search_keyword'] != '' ) :
    $resume_args['s'] = $_GET['resume_search_keyword'];
   endif;

    $resume_search_skills = array(
      'key' => '_resume_skills',
      'value' => $_GET['resume_search_keyword'],
      'compare' => 'LIKE'
    );

    $resume_search_job_duties = array(
      'key' => '_resume_job_duties',
      'value' => $_GET['resume_search_keyword'],
      'compare' => 'LIKE'
    );

  $resume_args['meta_query'] = array(
    'relation' => "OR",
    $resume_search_job_duties,
    $resume_search_skills
  );

  $resumes = new WP_Query($resume_args);

The sql generated for the same is as follows

SELECT SQL_CALC_FOUND_ROWS
    wp_posts.ID
FROM
    wp_posts
        INNER JOIN
    wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE
    1 = 1
        AND (((wp_posts.post_title LIKE '%teaching%')
        OR (wp_posts.post_excerpt LIKE '%teaching%')
        OR (wp_posts.post_content LIKE '%teaching%')))
        AND ((wp_postmeta.meta_key = '_resume_job_duties'
        AND wp_postmeta.meta_value LIKE '%teaching%')
        OR (wp_postmeta.meta_key = '_resume_skills'
        AND wp_postmeta.meta_value LIKE '%teaching%'))
        AND wp_posts.post_type = 'resume'
        AND (wp_posts.post_status = 'publish'
        OR wp_posts.post_author = 3
        AND wp_posts.post_status = 'private')

What I am looking for instead is

SELECT SQL_CALC_FOUND_ROWS
    wp_posts.ID
FROM
    wp_posts
        INNER JOIN
    wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE
    1 = 1
        AND (((wp_posts.post_title LIKE '%teaching%')
        OR (wp_posts.post_excerpt LIKE '%teaching%')
        OR (wp_posts.post_content LIKE '%teaching%')))
        **OR** ((wp_postmeta.meta_key = '_resume_job_duties'
        AND wp_postmeta.meta_value LIKE '%teaching%')
        OR (wp_postmeta.meta_key = '_resume_skills'
        AND wp_postmeta.meta_value LIKE '%teaching%'))
        AND wp_posts.post_type = 'resume'
        AND (wp_posts.post_status = 'publish'
        OR wp_posts.post_author = 3
        AND wp_posts.post_status = 'private')

Can someone please help where am I going wrong?

0

Try this:

$query = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        'resume_skills_clause' => array(
            'key' => '_resume_skills',
            'value' => $_GET['resume_search_keyword'],
            'compare' => 'LIKE'
        ),
        'resume_job_duties_clause' => array(
            'key' => "_resume_job_duties",
            'value' => $_GET['resume_search_keyword'],
            'compare' => 'LIKE'
        )
    )
));

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.