カスタムタクソノミーの並び替え(プラグインなしで)

2018-06-05

WordPressのカテゴリーやカスタムタクソノミーを任意に並び替えたいときプラグインを使うと簡単にできますが、プラグインを使わずに(と言っても値を入力するのにAdvanced Custom Fieldsを使うんですが)並び替えをしたい時のための備忘録。

カスタムタクソノミーにカスタムフィールド を持たせるためにAdvanced Custom Fieldsを使います。

Advanced Custom Fieldsでフィールド名を指定します。

ここではフィールド名:sort_orderと設定、カスタムフィールド を設置する「位置」はTaxsonomy Termを選択して表示したいカスタムタクソノミーを選択。

カスタムタクソノミーの画面で、[sort_order]の入力欄に任意の数値を入力します。

Advanced Custom Fieldsでの設定方法はこちらのサイトで詳しく説明されています。

get_categoriesで取得したカテゴリーを好きな順番で並べ替える
https://www.nishi2002.com/14929.html

上記サイトでは、通常のカテゴリーの並び替えの手順を記載されています。がカスタムタクソノミーでもほぼ同じです。

カテゴリーの情報を取得にはget_categoriesを使っていますが、カスタムタクソノミーにはget_termsを使います。

カスタムタクソノミー名: worksした場合

<?php
	$taxonomy = 'works';
	$args = array('hide_empty'=>false);
	$terms = get_terms($taxonomy, $args);
	$count = count($terms);
	for ($i=0; $i<$count; $i++) {
	  $terms[$i]->sort_order = get_field('sort_order', $taxonomy.'_'.$terms[$i]->term_id);
	}

	usort($terms, function($a, $b) use ($taxonomy) {
	   return get_field('sort_order', $taxonomy.'_'.$a->term_id) - get_field('sort_order', $taxonomy.'_'.$b->term_id);
	});
?>
	<ul>
	<?php foreach ( $terms as $term ){
			echo '<li class="tax-'.$term->slug.' link"><a href="'.get_term_link($term->slug, 'works').'">'.$term->name.'</a></li>'; 
	 }
	 ?>
	</ul>

好きな値でソートできるPHP関数であるusortを使い並び替える項目を指定します。