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

状況
- 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 );《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のコードを併記すると確実。

