如果我是你,我可能会使用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 不是修改搜索结果模板,而是在检索帖子后手动排序。:)
如果您实际上想按帖子类别排序,那么这可能不是您的解决方案,但可以使用相同的概念(或挂钩)。