順序をサポートしたカスタム投稿タイプのデフォルト表示順を変更してみる

カスタム投稿タイプを利用する際に、register post type の has_archiveパラメータを true とすると、投稿タイプのアーカイブ(一覧)表示を行うことができるようになります。

ただし、表示順については設定や入力にかかわらず公開日順になってしまうため、page-attributes をサポートして順序の入力を可能にしていても、表示に反映されることがありません。

今回は、この投稿タイプアーカイブの表示の際に、page-attributes がサポートされていれば、自動的に順序(menu_order)順に従って表示されるようにしてみましょう。

CODE 1では、記事を取得する直前の pre_get_posts にフックしてクエリーの条件を書き換える処理を行っています。ただし、条件指定がされていた場合は、上書きせずに指定値をそのまま利用するため、固定ページ同様に管理画面などの挙動も含めてデフォルトの表示順が順序の入力値通りとなり、ソートを行った場合は、それに従うようになります。

CODE 1

function custom_post_archive_orderby_menu_order( $wp_query ) {
	if ( $wp_query->is_post_type_archive() && post_type_supports( $wp_query->query_vars['post_type'], 'page-attributes' ) ) {
		if ( ! isset( $wp_query->query_vars['orderby'] ) ) {
			$wp_query->query_vars['orderby'] = 'menu_order';
		}
			if ( ! isset( $wp_query->query_vars['order'] ) ) {
			$wp_query->query_vars['order'] = 'ASC';
		}
	}
}
add_action( 'pre_get_posts', 'custom_post_archive_orderby_menu_order' );
管理画面も順序で指定した値通りになります

もっとも nest_posts_link、previous_posts_link のリンクテキストを変える必要はあるかもしれませんが。。

「順序をサポートしたカスタム投稿タイプのデフォルト表示順を変更してみる」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です