WordPressの検索にて、検索結果を日付の昇順、降順で並べるのはよくあるのだけれど、そのままだと「投稿タイプ」のものと「カスタム投稿タイプ」のものが、バラバラに出てくる。つまり日付でしかソートされていないもの。
そこで、「投稿タイプで並び替え、かつ日付で並び替え」というものにしたい。
いろいろ調べてみると、並び替えのfilterを通してカスタマイズするようです。
以下のコードの場合は、投稿タイプが「diary」を先に、続いて投稿タイプが「event」のものを並び替えて表示してくれる。
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 = 'diary' THEN '1'
WHEN {$wpdb->prefix}posts.post_type = 'event' THEN '2'
ELSE {$wpdb->prefix}posts.post_type END ASC,
{$wpdb->prefix}posts.post_date DESC";
endif;
return $orderby;
}
add_filter( 'posts_orderby', 'order_search_by_posttype', 10, 2 );
以上、検索結果で、特定のポストタイプを意図的に表示させるコードでした。