按帖子类型对搜索结果进行排序

时间:2015-02-10 作者:honk31

我需要按自定义帖子类型对搜索结果进行排序。问题是:订单是定制的。

我有5种不同的帖子类型,我得到的顺序如下:

艺术家作品页面发布我希望顺序如下:

艺术家贴子,艺术品,出版物,页面,到目前为止,这些元素按帖子类型分组,并按标题排序。精彩的现在我只需要定制订单。

有什么提示吗?

add_filter( \'posts_orderby\', \'order_search_by_posttype\', 10, 2 );
function order_search_by_posttype( $orderby ){
   global $wpdb;
    if( ! is_admin() && is_search() ) :
        $orderby = "{$wpdb->prefix}posts.post_type ASC, {$wpdb->prefix}posts.post_title ASC";
    endif;
    return $orderby;
}

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

我找到了关键字:SQL CASE表达式

function order_search_by_posttype($orderby){
    if (!is_admin() && is_search()) :
        global $wpdb;
        $orderby =
            "
            CASE WHEN {$wpdb->prefix}posts.post_type = \'artist\' THEN \'1\' 
                 WHEN {$wpdb->prefix}posts.post_type = \'post\' THEN \'2\' 
                 WHEN {$wpdb->prefix}posts.post_type = \'artwork\' THEN \'3\' 
                 WHEN {$wpdb->prefix}posts.post_type = \'publication\' THEN \'4\' 
            ELSE {$wpdb->prefix}posts.post_type END ASC, 
            {$wpdb->prefix}posts.post_title ASC";
    endif;
    return $orderby;
}
add_filter(\'posts_orderby\', \'order_search_by_posttype\');

结束

相关推荐

Functions are causing errors

我在插件的PHP上声明一个函数。插件在每个帖子的顶部加载代码(帖子布局是插件的名称)。无法在/home/content/08/10290908/html/wp-content/plugins/post-layout/plugin.php(181):eval()\'d code:4)中重新声明vote\\u-up()(之前在/home/content/08/102908/html/wp-content/plugins/post-layout/plugin.php中声明)。php(181):第36行的eval