web-dev-qa-db-ja.com

投稿の種類で検索結果を並べ替える

検索結果をカスタム投稿タイプで並べ替える必要があります。問題:注文はカスタムです。

私は5つの異なる投稿タイプがあります、そして私はそのような順序を得ました:

  1. アーティスト
  2. アートワーク
  3. ページ
  4. 役職
  5. 出版物

私は次のように注文したいのですが。

  1. アーティスト
  2. 役職
  3. アートワーク
  4. 出版物
  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;
}
4
honk31

私はキーを見つけました:SQL CASE Expression

add_filter( 'posts_orderby', 'order_search_by_posttype', 10, 2 );
function order_search_by_posttype( $orderby, $wp_query ){
    if( ! $wp_query->is_admin && $wp_query->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;
}
10
honk31