更改WordPress默认搜索功能中的排序依据

时间:2020-12-31 作者:Nora McDougall-Collins

我客户的网站有一个博客类别和许多产品类别。她希望搜索结果包括博客帖子,但首先要有产品帖子。

我可以看到两个主要的实现选项

更改函数中的搜索查询。php在搜索中对搜索查询结果重新排序。php模板文件我的问题是:是否有人实现了此任务,您使用了什么实现方法,以及在此过程中遇到了什么问题?

我已经找到了这个具体情况的答案,结果一无所获。

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

如果我是你,我可能会使用posts_search_orderby hook 更改搜索的步骤ORDER BY 子句,因为这样,排序将与分页一起工作。

因此,例如,在您的案例中,您可能希望按帖子类型进行排序,就像这样:(那么,如果“产品帖子”属于不同的帖子类型?)

// In functions.php:

add_filter( \'posts_search_orderby\', \'my_posts_search_orderby\', 10, 2 );
function my_posts_search_orderby( $orderby, $query ) {
    if ( $query->is_main_query() && is_search() ) {
        global $wpdb;
        $orderby = "{$wpdb->posts}.post_type";
    }

    return $orderby;
}
但是,如果您只需要在同一页上排序,那么您可以使用第二个选项,就像这样,它使用本机usort()strcmp() PHP中的函数:

// In functions.php:

add_filter( \'the_posts\', \'my_the_posts\', 10, 2 );
function my_the_posts( $posts, $query ) {
    if ( $query->is_main_query() && is_search() ) {
        usort( $posts, function ( $a, $b ) {
            return strcmp( $a->post_type, $b->post_type ); // A-Z (ASCending)
//          return strcmp( $b->post_type, $a->post_type ); // Z-A (DESCending)
        } );
    }

    return $posts;
}
但是,它使用the_posts hook 不是修改搜索结果模板,而是在检索帖子后手动排序。:)

如果您实际上想按帖子类别排序,那么这可能不是您的解决方案,但可以使用相同的概念(或挂钩)。

相关推荐

search based on custom field

我的问题是,有没有办法将wordpress的搜索配置为在自定义帖子类型中搜索自定义字段值。//------------html code--------------------// <input type=\"text\" name=\"keyword\" id=\"keyword\" onkeyup=\"fetch()\"></input> <div id=\"datafetch\"></div> &#x