在搜索页面中显示匹配类别

时间:2014-08-23 作者:Mark Devlin

我当前的搜索仅将帖子显示为结果。

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

我的网站有乔治·克鲁尼、乔治·R.R.马丁等的类别。如何获得与搜索词匹配的类别列表,并显示在结果页面的顶部?

我试过这个:

<?php 
$search_query = get_search_query();

$term = get_term_by( \'name\', $search_query, \'category\' );
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    echo "<ul>";
    foreach ( $terms as $term ) {
    echo "<li>" . $term->name . "</li>"; 
    }
    echo "</ul>";
}
;?> 
但我没有得到任何输出

2 个回复
SO网友:gmazzap

本质上,您需要的是显示当前查询的帖子所属的类别。我将在这里发布一个函数,该函数以taaxonomy(或一组分类法)作为参数,并返回该分类法中分配给所有查询帖子的所有术语。

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 );
}
一旦在functions.php (或在活动插件中)在模板中search.php 只需使用:

if ( is_search() ) {
  $cats = queried_posts_terms( \'category\' );
  echo ! empty( $cats ) ? \'<ul>\' : \'\';
  foreach( $cats as $cat ) {
    printf( \'<li><a href="%s">%s</a></li>\', get_term_link($cat), esc_html($cat->name) );
  }
  echo ! empty( $cats ) ? \'</ul>\' : \'\';
}

SO网友:Will S.

您可以编辑搜索。php文件基本上运行多个搜索循环,如下所示。。。

    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();
基本上,您所做的是获取查询字符串(搜索字符串),并使用其他参数运行自定义WP\\U查询。运行第一个自定义查询以获取匹配的类别后,可以使用原始的$query\\u字符串运行其他查询。

我知道这并不完全是你想要的,但它应该给你一个起点,让它发生。如果您还有任何问题,我很乐意为您提供帮助。

结束

相关推荐

如何管理Get_Search_Query()的特定“ORDER BY”?

如何在搜索中进行管理。php文件使用以下代码管理posts搜索查询的顺序<?php echo sprintf(__(\'%s Zoekresultaten voor \', \'website\'), $wp_query->found_posts); echo get_search_query(); while (have_posts()) { the_post(); ?> <article>