single.phpに所属タームが複数ある場合に、所属タームの表示順を指定する方法です。
並び順を変更するプラグインもありますが、複数のカスタム投稿タイプが登録されている場合に不具合が多いので、プラグインなしで作成します。
投稿タイプがひとつの場合は、プラグインを使用してOKかと思います。
Category Order and Taxonomy Terms Order
ドラッグ & ドロップで並べ替え可能な JavaScript 機能を使用して、カテゴリーとすべてのカスタムタクソノミーのターム(階層)と子タームを並べ替えます。
目次
大まかな手順
- ターム詳細にカスタムフィールド(表示順入力欄)を用意する
- 管理画面のターム一覧に、カスタムフィールドを表示させる旨をfunctions.phpに追記(上記の順番を見やすく表示させる)
- single.phpで、所属タームをカスタムフィールドの数値順にソートする
あった方がわかりやすいですが、手順2はなくても構いません。
カスタムフィールドにチェックを入れた記事だけ表示、別のフィールドに入力した数字の順に並べる
【準備するもの】 カスタム投稿タイプを使用Advanced Custom Field 記事の順番を指定できるプラグインで、不具合なく安心して使用できるものがないため、カスタムフィー…
準備するもの
- advanced custom field(プラグイン)
- functions.php
- single.php
毎回必ず入れているadvanced custom field
Advanced Custom Fields (ACF)
ACF helps customize WordPress with powerful, professional and intuitive fields. Proudly powering over 2 million sites, WordPress developers love ACF.
手順1.Advanced Custom FIeldで、ターム詳細に数値入力欄を設ける
今回は、ターム名:’技術’、タームスラッグ:’techmiques’というタームで作成します。
フィールドタイプは数値、表示条件はタクソノミーが’技術’と等しい場合、で指定します。
手順2.ターム一覧にカスタムフィールドを表示させる
functions.phpに下記を追記します。
// 管理画面での表示項目追加
function my_add_columns($columns) {
$columns['my_column_name'] = '表示順';
return $columns;
}
add_filter( 'manage_edit-techniques_columns', 'my_add_columns' );
// カスタムフィールド'sortnum'を表示させる
function my_add_columns_content_taxonomy($arg_1, $column_name, $term_id) {
if( $column_name == 'my_column_name' ) {
$sort = get_field('sortnum', 'techniques_'.$term_id);
$stitle = $sort;
}
if ( isset($stitle) && $stitle ) {
echo esc_attr($stitle);
}
}
add_action( 'manage_techniques_custom_column', 'my_add_columns_content_taxonomy', 10, 3 );
これで管理画面にカスタムフィールド’sortnum’が表示されるようになります。
こちらの画像は数値入力後なので、本来はこの段階ではまだ数字は表示されません。
手順3.タームの表示順を入力する
手順1で、ターム詳細に「カテゴリー表示順」というフィールドが追加されましたので、入力していきます。
(ターム一覧→ターム名クリック→下の方にあります)
タームの増加や入れ替えの可能性を考え、10刻み、100刻みなどで入れていくといいかもしれません。
手順4.singe.phpでソートする
single.phpの所属タームを表示させる部分で、カスタムフィールド’sortnum’に入力した数値順になるように指定します。
<?php
$post_ID = get_the_ID();
$taxonomy_name = 'techniques';
$category_term = wp_get_post_terms($post_ID, $taxonomy_name, array( 'meta_key' => 'sortnum', 'orderby' => 'meta_value_num', ));
if ($category_term) {
foreach ($category_term as $value) {
$url = home_url('/'.$taxonomy_name. '/' . $value->slug.'/');
echo '<a href="'.$url.'">'.$value->name.'</a>';
}
}
?>
コメント