Advanced Custom Fieldsで選択したタクソノミーをソートさせる
Wordpressの案件で「Advanced Custom Fieldsを使ってカテゴリーの画面に管理画面で選択したタグを表示させる」というUIを作った時につまづいたので備忘録として書いておきます。
なんでつまづいたのか?
Advanced Custom Fieldsはめちゃめちゃ便利なプラグインで管理画面のカスタムフィールドはすぐできた。
フィールドタイプは「タクソノミー 」にし、タクソノミー を「タグ」に設定。Appearanceはチェックボックスにした。
位置は「タクソノミー 」「等しい」「カテゴリー」とした。
これでカテゴリーの画面にタグを選択するカスタムフィールドが表示されるようになる。
余談だが、Advanced Custom Fieldsをカテゴリーで使う際には、「category_[id]」のような指定をしなければいけない。
<?php
$category_id = get_queried_object_id();
$post_id = 'category_'.$category_id;
$category_tags = get_field('acf-category-tags', $post_id );
?>
<?php if($category_tags): ?>
<?php foreach((array)$category_tags as $value): ?>
<li><a href="<?php echo get_bloginfo('url') . '/tag/' . $value->slug; ?>"><?php echo $value->name; ?></a><span class="count"><?php echo $value->count; ?></span></li>
<?php endforeach; ?>
<?php endif; ?>
こんな感じのコードで、選択したタグとタグに紐づけられている投稿の件数を表示させることもできた。
でも、このままだと表示したタグを記事の件数順などでソートさせることができなかった。
Advanced Custom Fieldsのタクソノミーで選択した値はおそらくID順で出力されるので、このままではソートすることができない。
死ぬほど詰まったので弊社のエンジニアに聞いてみたところ、get_termsのincludeにカスタムフィールド名を入れればソートできるとのこと。
具体的なソースは以下の通り。
<?php
$category_id = get_queried_object_id();
$post_id = 'category_'.$category_id;
$category_tags = get_field('acf-category-tags', $post_id );
?>
<?php
$terms = get_terms( array(
'taxonomy' => 'post_tag',
'include' => $category_tags,
'orderby' => 'count',
'order' => 'DESC'
) );
?>
<?php if($terms): ?>
<?php foreach((array)$terms as $value): ?>
<li><a href="<?php echo get_bloginfo('url') . '/tag/' . $value->slug; ?>"><?php echo $value->name; ?></a><span class="count"><?php echo $value->count; ?></span></li>
<?php endforeach; ?>
<?php endif; ?>
注意点としては、Advanced Custom Fieldsの設定画面で返り値をタームIDにしなければならないということだけだった。
これで、orderbyやorderなどでの値のソートができるようになった。
ありがとうございました🙏