include tag and category in wordpress search results

1

Hello, I would like to include tags and categories in the search results ie when typing in the form the category HAIR would like all posts in this category to appear.

I was using the code below :( But I noticed that the pages are the result of the search results.)

I'm new to wp 3 days ago I'm looking for this resolution, if anyone has any tips, thank you very much.

Follow the code:

function atom_search_where($where){
  global $wpdb;
  if (is_search())
    $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
  return $where;
}

function atom_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function atom_search_groupby($groupby){
  global $wpdb;


  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;


  if(!strlen(trim($groupby))) return $groupby_id;


  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');
    
asked by anonymous 24.07.2015 / 06:25

2 answers

1

I do not know why this question came up for me today, but it has more than 200 views and has no answer for a reasonably simple thing that is very useful, so here it goes:

You do not need to use $wpdb and tinker with SQL clauses for this, just use the hook pre_get_posts and change the main query:

<?php
add_action( 'pre_get_posts', 'modifica_busca' );

function modifica_busca( $query ) {

    // pre_get_posts é chamada diversas vezes numa requisição
    // então precisamos conferir se estamos na chamada pricipal da busca
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        $termo_de_busca = get_search_query();

        // busca se a palavra digitada confere com alguma categoria
        // taxonomy pode ser trocada por post_tag ou outra taxonomia
        $taxonomy = 'category';
        $cat = get_term_by( 'slug', $termo_de_busca, $taxonomy );

        // se o termo de busca não existe como termo de uma 
        // taxonomia, retorna e finaliza a busca aqui
        if ( ! $cat ) {
            return;
        }

        // remove o termo de busca pra que a busca não inclua somente
        // os posts que tem a palavra no titulo ou conteudo
        $query->set( 's', '' );

        // busca outras consultas por taxonomia que podem existir
        $tax_query = $query->get( 'tax_query' );

        // adiciona a nossa
        $tax_query[] = array(
            'field' => 'slug',
            'taxonomy' => $taxonomy,
            'terms' => $termo_de_busca,
        );

        // adiciona a busca completa de volta à consulta principal
        $query->set( 'tax_query', $tax_query );
    }
}
    
02.11.2016 / 01:39
0

I think by default wordpress will only search for the title and content of a post. Maybe this plugin will help:

link

I was having this problem and I only succeeded with the plugin.

But if you do not want to use a plugin you can take a look at this other user who has the same question:

link

    
25.07.2015 / 00:32