如何筛选搜索结果顺序?

时间:2012-02-09 作者:PVA

有没有办法让我的搜索结果先显示页面,然后再显示页面后的帖子?

我的网站是一个有博客的商业网站,而博客是主要的。静态页面包含所有“这就是我们所做的”内容,如果有人在搜索各种服务,理想情况下,它们会首先出现。博客帖子的语调更为轻快,但它们都是最近发布的,所以它们首先出现。

搜索循环来自Kubrick主题:

<?php if (have_posts()) : ?>
<div class="center">
<div class="padding-bottom">
<h1><?php _e(\'Our Search Results\', \'kubrick\'); ?></h1>
</div>
</div>

<?php while (have_posts()) : the_post(); ?>

<div <?php post_class(); ?>>
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>"        rel="bookmark" title="<?php printf(__(\'Permanent Link to %s\', \'kubrick\'), the_title_attribute(\'echo=0\')); ?>"><?php the_title(); ?></a></h3><?php the_excerpt(); ?>
</div>

<?php endwhile; ?>

<?php else : ?>

<h2 class="center"><?php _e(\'No luck. Try again?\', \'kubrick\'); ?></h2>
<?php get_search_form(); ?>

<?php endif; ?>
我是否可以在其中添加一些内容,以指定“页面”的任何结果都将在“帖子”的结果之前列出。或者,WP实际上没有在该级别区分页面和帖子吗?既然静态页面是“静态”的,我可以使用ID吗?

谢谢

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您可以使用posts_orderby 筛选以更改返回帖子的顺序。这将对每个查询(前向查询和后向查询)运行,因此请确保您希望通过使用is_admin, is_search

在下面的示例中,搜索结果按帖子类型按升序排序(例如,页面然后帖子),然后按帖子日期按降序排序。

add_filter(\'posts_orderby\',\'my_sort_custom\',10,2);
function my_sort_custom( $orderby, $query ){
    global $wpdb;

    if(!is_admin() && is_search()) 
        $orderby =  $wpdb->prefix."posts.post_type ASC, {$wpdb->prefix}posts.post_date DESC";

    return  $orderby;
}
免责声明:如果您有一个帖子类型“广告”,并且它出现在搜索结果中,那么它将出现在页面之前

撇开上面的免责声明不谈,这是一种相对廉价的方式来实现你的目标。

结束

相关推荐

search this custom post type

我正在尝试在我的博客上搜索特定的自定义帖子类型。自定义帖子类型的名称为:website_bookmarks我已使用隐藏字段修改了搜索表单<input type=\"hidden\" name=\"post_type\" value=\"website_bookmarks\" /> 因此,在我的URI搜索页面上,我将看到。。。www.mydomain.com/?s=mysearchterm&post_type=website_bookmarks 问题是它只显示我的常