Mostrar categorias correspondentes na página de pesquisa

Minha pesquisa atual mostra apenas POSTOS como resultados.

http://newslines.org/?s=george

Meu site tem categorias para George Clooney, George RR Martin etc. Como faço para obter uma lista de categorias que correspondem ao termo de pesquisa para mostrar na parte superior da página de resultados?

Eu tentei isso:

<?php $search_query = get_search_query(); $term = get_term_by( 'name', $search_query, 'category' ); if ( !empty( $terms ) && !is_wp_error( $terms ) ){ echo "
    "; foreach ( $terms as $term ) { echo "
  • " . $term->name . "
  • "; } echo "
"; } ;?>

Mas eu não recebo nenhum resultado

Solutions Collecting From Web of "Mostrar categorias correspondentes na página de pesquisa"

Essencialmente, o que você precisa é mostrar as categorias que as postagens atualizadas atuais pertencem. Posso publicar aqui uma function que toma como argumento uma taaxonomia (ou uma série de taxonomias) e retorna todos os termos em que (as) taxonomia (s) que são atribuídas a todas as postagens consultadas.

 function queried_posts_terms( $taxonomies = 'category' ) { global $wp_query, $wpdb; if ( empty( $wp_query->posts ) ) return FALSE; $ids = wp_list_pluck( $wp_query->posts, 'ID' ); $taxonomies = array_filter( (array) $taxonomies, function( $tax ) { if ( is_string( $tax ) ) { $tax = sanitize_title( $tax ); return taxonomy_exists( $tax ) ? esc_sql( $tax ) : NULL; } } ); if ( empty( $taxonomies ) ) return FALSE; $sql = "SELECT t.name, t.slug, t.term_group, tt.* FROM {$wpdb->terms} t INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id INNER JOIN {$wpdb->term_relationships} tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tr.object_id IN (" . implode( ', ', $ids ) . ") AND tt.taxonomy IN ('" . implode( "', '", $taxonomies ) . "') GROUP BY t.term_id"; return $wpdb->get_results( $sql ); } 

Depois de ter esta function em suas functions.php (ou em um plugin ativo) em seu modelo, propably search.php use apenas:

 if ( is_search() ) { $cats = queried_posts_terms( 'category' ); echo ! empty( $cats ) ? '' : ''; } 

Você pode editar seu arquivo search.php para executar essencialmente vários loops de pesquisa, como este …

  global $query_string; $query_args = explode("&", $query_string); $search_query = array(); foreach($query_args as $key => $string) { $query_split = explode("=", $string); $search_query[$query_split[0]] = urldecode($query_split[1]); } // foreach $first_args = $search_query; // set up your additional query parameters // I just used a sample of only getting a certain category, but you get the idea $first_args['cat'] = 162; $first_args['orderby'] = 'date'; $first_search = new WP_Query($first_args); // Do your loop output stuff here endwhile; wp_reset_query(); 

Basicamente, o que você faz é pegar a seqüência de consulta (seqüência de pesquisa) e executar um WP_Query personalizado usando seus parâmetros adicionais. Depois de executar a primeira consulta personalizada para obter categorias correspondentes, você pode simplesmente executar uma consulta adicional usando o $ query_string original.

Eu sei que não faz EXATAMENTE o que você quer, mas deve dar-lhe o ponto de partida para que isso aconteça. Fico feliz em ajudar se você tiver outras dúvidas.