WP_query with OR relation between args[‘s’] and arg[‘meta_query’]

Question

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
s.k. 3 years 0 Answers 47 views 0

Leave an answer