在搜索结果中显示类别

时间:2013-01-02 作者:jasenmp

我找不到任何与我的问题有关的东西。

如果可能的话,如果没有插件,显示搜索结果的类别有多困难。

所以应该是这样的:

第一类

类别1的搜索结果

第二类

第二类搜索结果

等等

任何帮助都将不胜感激。我不需要任何人来帮我做这项工作,我是一名PHP/Wordpress初学者,但我想我在理解代码方面相当有能力。

不幸的是,在搜索google和stackexchange时,我一直无法找到正确的方向。

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

您主要想做的是更改正在执行的SQL查询,以便按类别对查询结果进行分组代码取自here 通过按类别排序进行分组。您可以在主题搜索中放置以下代码。php文件

<?php   add_filter(\'posts_join\', create_function(\'$a\', \'global $wpdb; return $a . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";\'));
        add_filter(\'posts_where\', create_function(\'$a\', \'global $wpdb; return $a . " AND $wpdb->term_taxonomy.taxonomy = \\\'category\\\'";\'));
        add_filter(\'posts_orderby\', create_function(\'$a\',\'global $wpdb; return "$wpdb->term_taxonomy.term_id DESC";\'));
    query_posts(\'\');
?>
其他人都在搜索。php代码应该是

$catid = false;
while ( have_posts() ) { 
  the_post();
  $cat = get post cat id
  if ($cat != $catid) { // switching to posts from new category
    display new categoty title
  }
  display post
}  
如果帖子可以属于多个类别,那么显示逻辑可能会更复杂,因为很难决定要切换到哪个类别

SO网友:Gioia Fueter

你可以,在搜索中。php模板页面,首先使用get\\u categories获取类别。

然后在循环中,您可以循环浏览类别,以查看搜索结果是否具有该类别。如果是,请将其置于类别的索引下。在这里,您不会显示任何内容,只需构建阵列即可。

然后在循环之后,您可以使用foreach显示按类别排序的搜索结果。

这样,如果结果不止是一个类别,它将为每个类别显示。

更新

代码应该是这样的,内部搜索。主题中的php。

1) 循环之前:

$my_cat_array = array()
$my_cats = get_categories();
获取类别。

2) 回路内部:

foreach ($my_cats as $my_cat) {
    if (in_category( $my_cat->term_id)) {
        $my_cat_array[$my_cat->term_id][] = $post;
    }
}
对于每个类别,它检查当前帖子是否有该类别,如果有,则将其存储在数组中。

3) 循环后:

global $post;
foreach($my_cat_array as $cat_id => $posts_from_category) {
    $current_cat = get_category($cat_id);
    echo "Search result from category ". $current_cat->name;
    foreach($posts_from_category as $post) {
       setup_postdata($post);
       // here would go the display code
    }
 }
也许他们还有其他方法可以做到这一点,虽然我还没有真正尝试过,但这应该是可行的,所以可能会有一些错误。如果您确实尝试了它,但它会出现错误,请告诉我,我会尽力提供帮助。

结束

相关推荐

Remove some pages from search

在我的网站上,我希望一些页面不能通过搜索表单进行查询(这样当我有类似www.ex.com/?s=banana的内容时,它们就不会出现)有没有一种方法可以从搜索结果页面中“删除”页面(而不是盲目地执行if Is\\u page(id),display:none的条件)