Category Order and Taxonomy Terms Orderを使うとget_tags()の並び替えが効かなくなる

Category Order and Taxonomy Terms Orderを使った際、get_tags()の並び順(orderby)がidから変更できなくなったので対応方法をメモしておきます。

サンプルコード

get_tags()でタグの一覧を表示させてみます。

PHP

<?php $tags = get_tags(); if( $tags ): ?>
	<ul>
		<?php foreach( $tags as $tag ): ?>
			<li>
				ID:<?php echo esc_attr( $tag->term_id ); ?>
				名前:<?php echo esc_html( $tag->name ); ?>
			</li>
		<?php endforeach; ?>
	</ul>
<?php endif; ?>

以下のようなタグを登録して、表示を確認してみます。

  • 名前:black
    ID:8
  • 名前:blue
    ID:10
  • 名前:green
    ID:6
  • 名前:orange
    ID:11
  • 名前:red
    ID:12
  • 名前:white
    ID:7
  • 名前:yellow
    ID:9

引数を特に設定していないので、タグの名前順で表示されました。

コードはそのままで、Category Order and Taxonomy Terms Orderをインストールして有効化してみます。
並び順がタグの名前順からID順に変わりました。

引数にorderby=nameを指定して、名前順になるようにしてみます。

PHP

<?php $tags = get_tags('orderby=name'); if( $tags ): ?>
	<ul>
		<?php foreach( $tags as $tag ): ?>
			<li>
				ID:<?php echo esc_attr( $tag->term_id ); ?>
				名前:<?php echo esc_html( $tag->name ); ?>
			</li>
		<?php endforeach; ?>
	</ul>
<?php endif; ?>

引数を設定しても反映されず、ID順のままでした。

 

対応方法

設定 > Taxonomy Terms Order 内の「自動ソート」を無効にして、get_tags()を引数なしに戻します。

PHP

<?php $tags = get_tags(); if( $tags ): ?>
	<ul>
		<?php foreach( $tags as $tag ): ?>
			<li>
				ID:<?php echo esc_attr( $tag->term_id ); ?>
				名前:<?php echo esc_html( $tag->name ); ?>
			</li>
		<?php endforeach; ?>
	</ul>
<?php endif; ?>

これでタグが名前順で表示されるようになりました。

「自動ソート」はプラグインで指定した順番で自動出力するかどうかを指定するもので、無効にした場合はコード上で指定する必要があります。
引数にorderby=term_orderを指定すればOKです。

PHP

<?php $categories = get_categories('orderby=term_order'); if( $categories ): ?>
	<ul>
		<?php foreach( $categories as $category ): ?>
			<li>
				ID:<?php echo esc_attr( $category->term_id ); ?>
				名前:<?php echo esc_html( $category->name ); ?>
			</li>
		<?php endforeach; ?>
	</ul>
<?php endif; ?>

これでカテゴリーは指定した順番で並んで、タグは名前順で表示されるようになりました。
 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

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

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年4月
 123456
78910111213
14151617181920
21222324252627
282930