按帖子类型排序的搜索结果

时间:2012-11-17 作者:mygm

我在一个有几种帖子类型的网站上工作,确切地说是4种,我正在尝试设置搜索结果页面,以便按帖子类型对结果进行筛选/排序。

例如,当一个人用搜索结果搜索他们要带到页面的一个词时,会显示从所有帖子类型中找到的所有帖子,但在顶部有不同的帖子类型名称链接,这些链接将对结果进行排序,并仅显示相应帖子类型的帖子。现在,我在搜索结果页面上为每个帖子类型设置了几个循环,但当我测试它时,这些循环都显示了相同的结果,即使每个循环都有一个针对不同帖子类型的查询。

如何修复循环,使其仅显示该帖子类型的搜索结果?我不想有不同的搜索表单或重置查询,最终丢失搜索词。以下是页面中的一些代码--http://pastebin.com/L9zEw1cn

第一个循环是默认的循环,它将显示所有结果,第二个循环是我尝试用于其余post类型的循环。

那么,是否有办法修复第二个循环,使其只显示该帖子类型的搜索结果?

任何帮助都将不胜感激。谢谢

回复

2 个回复
SO网友:Vladimir

您可以使用过滤器posts_clauses例如:

add_filter( \'posts_clauses\', \'post_query_order\', 20, 1 );
function post_query_order( $pieces )
{
    global $wpdb;
    $pieces[\'orderby\'] = $wpdb->prefix.\'posts.post_type ASC\';
    return $pieces;
}

SO网友:Mateusz Hajdziony

在第二个循环中,您正在为posts查询设置参数,但您没有在任何地方使用它们。您应该放置query_posts( $args ) 在第二个循环之前。您也可以使用get_posts 功能或WP_Query

编辑:来自page about query_posts function on WordPress codex:

query\\u posts()是更改WordPress用于显示帖子的默认查询的最简单但不是首选或最有效的方法。使用query\\u posts()显示不同于通常显示在特定URL上的帖子。现在,在您的代码中,您在相同的帖子中循环了两次。第二个循环与第一个循环完全相同。

现在,如果你query_posts() 在第二个循环之前有不同的参数,如下所示:

$args = array( \'post_type\' => \'videos\', \'s\' => $s );
query_posts( $args );
if(have_posts()) :
while(have_posts()) :
the_post();

// Display the post

endwhile; endif;
wp_reset_postdata(); ?>
您将循环浏览不同的帖子集。

结束

相关推荐

Sort post's categories by ID

我有一个博客,其中几个帖子的类别必须先输出,然后再输出其他类别。与其他类别相比,这些类别的ID较低。我正在使用get_the_category_list 但它并没有像我预期的那样工作。这让我很困惑,因为我记得有一个主题做得很好。有人能给我指出正确的方向吗?谢谢<?php get_the_category_list( array( \'orderby\' => \'ID\', \'order\' => \'ASC\' ) ); ?>&