1

I have created a search using WP_Query, it seems like this query is looking for the queried term in title AND tags.

Is there a way to have this search the title OR tags?

$s = $request['s'];
$tags = str_replace(' ', '-', strtolower($request['s']));

$paged = $request['page'];
$posts_per_page = $request['per_page'];

$result = new WP_Query([
    'post_type'         => 'post',
    'category__in'      => 3060,
    'posts_per_page'    => $posts_per_page,
    'paged'             => $page,
    'orderby'           => 'date',
    'order'             => 'desc',
    's'                 => $s,
    'tag'               => array($tags)
]);
  • Do you want to search in tags, or treat the search query as potential slug of tag? – Krzysiek Dróżdż Jan 28 at 7:53
0

Please use below code to show posts in texonomy and titles

$s = $request['s'];
$tags = str_replace(' ', '-', strtolower($request['s']));

$q1 = get_posts(array(
        'fields' => 'id',
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        's' =>  $s 

));
 $q2 = get_posts(array(
        'fields' => 'ids',
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'tag' => array($tags)
));
$unique = array_unique( array_merge( $q1, $q2 ) );

$posts = get_posts(array(
    'post_type' => 'post',
    'post__in' => $unique,
    'posts_per_page' => -1
));
  if ($posts ) : 

foreach( $posts as $post ) :
//show results
endforeach;
endif;

  • The only problem is that you do not perform search in tag titles, but in tag slugs. And when I think of "searching in tags", most probably I have tag names on my mind... But maybe it's just me. – Krzysiek Dróżdż Jan 28 at 7:42
-1

You just need to add

 'relation' => 'OR'

in your Query arguments. add it and it will return the data with OR condition.

Hope it helps.

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.