制作Note

WordPressの検索機能で固定ページと投稿とでソートをかけたい

WordPressの検索機能で、投稿ページより固定ページを上にソートすることは、カスタムコードを追加することで可能です。これには、WordPressのpre_get_postsフックを使います。

以下は、検索結果において固定ページを投稿より上に表示するためのカスタムコード例です。

function my_custom_search_order( $query ) {
    if ( $query->is_search() && !is_admin() && $query->is_main_query() ) {
        // 固定ページを優先して表示するためのカスタムソート
        $query->set( 'post_type', array( 'page', 'post' ) );
        $query->set( 'orderby', 'type' );
        $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'my_custom_search_order' );

このコードは、テーマのfunctions.phpファイルに追加します。

固定ページを投稿より下にするにはASCの部分をDESCにすれば良いです。

このコードでは、検索クエリに対してpost_typeをpageとpostの順に設定し、orderbyをtypeに設定することで、検索結果で固定ページが投稿より上に表示されるようにしています。

さらに投稿は日付順にする場合は下記にて

function my_custom_search_order( $query ) {
    if ( $query->is_search() && !is_admin() && $query->is_main_query() ) {
        // 固定ページを優先して表示し、投稿は日付の新しい順にソート
        $query->set( 'post_type', array( 'page', 'post' ) );
        $query->set( 'orderby', array( 'type' => 'ASC', 'post_date' => 'DESC' ) );
    }
}
add_action( 'pre_get_posts', 'my_custom_search_order' );