首页 > 解决方案 > WordPress 查询组按 post_types

问题描述

是否可以按帖子类型对 WP_Query 进行排序或分组?

我正在制作一个搜索结果页面,我想要的是示例:

页数:

帖子

自定义帖子类型:

标签: wordpressloopssearch

解决方案


add_filter( 'posts_orderby', 'filter__posts_orderby', 10, 2 );

function filter__posts_orderby( $orderby, $wp_query ) {
    if( ! $wp_query->is_admin && $wp_query->is_search ) :
        global $wpdb;
        $orderby =
            "
            CASE WHEN {$wpdb->prefix}posts.post_type = 'page' THEN '1' 
                 WHEN {$wpdb->prefix}posts.post_type = 'post' THEN '2' 
                 WHEN {$wpdb->prefix}posts.post_type = 'your_custom_post_type' THEN '3' 
                 WHEN {$wpdb->prefix}posts.post_type = 'your_custom_post_type' THEN '4' 
            ELSE {$wpdb->prefix}posts.post_type END ASC, 
            {$wpdb->prefix}posts.post_title ASC";
    endif;
    return $orderby;
}

可能这会帮助你!

下面是在搜索结果中添加自定义帖子类型的代码:

add_action( 'pre_get_posts','action__pre_get_posts' );

function action__pre_get_posts($wp_query){
  if ( !is_admin() && is_main_query() && is_search() ){
    $wp_query->set( 'post_type'=>array('post','your_custom_post_type','page' ) );
  }
}

也将此代码放在您的活动主题的functions.php文件中。


推荐阅读