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?

bumped to the homepage by Community 2 days ago

This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.

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 acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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