この記事にはおすすめ商品の広告があります

状況

  • CMS《WordPress》にて、《Vector,Inc》製テーマ《katawara》を使用。
  • プラグイン《Custom Taxonomy Order》で、WP標準のタグ(post-tag)のタームの並び順を変更している。
  • 投稿ページでは指定通りの並び順になるが、アーカイブページでは指定通りの並び順にならない。

要求・要望

  • アーカイブページでもプラグインで指定した並び順を適用したい。

考えられる原因

  • 《Custom Taxonomy Order》はterm_orderに並び順を保存するが、WordPress側では指定されない限りterm_orderで並べ替えを行わない。
  • WordPressがアーカイブページでタグ一覧を取得する際に並び順が明示されていないため、デフォルト順もしくは不明な順に並べられている?
  • テーマ《katawara》ではアーカイブページでterm_orderを参照しない?

対策

1.タームを取得する際にterm_orderを参照するように強制する

functions.phpに下記のコードを追加する。

PHP
// タグの並べ替えをサイト全体に適用する
function force_term_order_on_archives( $args, $taxonomies ) {
	if ( in_array( 'post_tag', $taxonomies, true ) ) {
		$args['orderby'] = 'term_order';
		$args['order'] = 'ASC';
	}
	return $args;
}
add_filter( 'get_terms_args', 'force_term_order_on_archives', 10, 2 );
Note

post_tagの部分をカスタムタクソノミーのスラッグなどに置換することで、WP標準タグ以外にも適用できます。

《katawara》の場合は上記のコードで対応可能。
タームの取得にget_terms()を使用するテーマなら同様に対応可能なはず(未検証)。

2.上記のコードが効かない場合

タームの取得にget_terms()ではなくWP_Term_Queryを使用しているテーマの場合は、functions.phpに下記のコードを追加する。

PHP
// タグの並べ替えをサイト全体に適用する
function modify_term_query_for_custom_order( $query ) {
	if ( isset( $query->query_vars['taxonomy'] ) ) {
		$taxonomy = $query->query_vars['taxonomy'];
		if ( $taxonomy === 'post_tag' ) {
			$query->query_vars['orderby'] = 'term_order';
			$query->query_vars['order'] = 'ASC';
		}
	}
}
add_action( 'pre_get_terms', 'modify_term_query_for_custom_order' );

このコード単体で動作するが、よくわからない場合は1と2のコードを併記すると確実。

コメント

※送信されたコメントは管理者が確認するまで表示されません。