カテゴリ絞り込み一覧ページみたいなやつ。
追記:20240520
なんかダメだった。
だいぶ間が空いてるんで、そもそも間違ってたのか仕様が変わったのか、もうわからない。
この記事のコードは使えない。
新しく書いたのでこっち参照。
taxonomy.phpとは
category.phpのカスタム投稿版といえばいいか。
なければarchive.phpで代用される。category.phpで代用されるかは確認してない。
「taxonomy.php」の他、小分けにする場合は「taxonomy-【ターム名】.php」で作る。
参考
- [WordPress]taxonomy.phpで現在のカスタムタクソノミーを取得しカスタムフィールドの値で条件分岐させる | tipsBear
- WordPress で get_terms を使ったターム一覧の表示方法 – by Takumi Hirashima
記事一覧部分
動いてるから間違いないはずなんだけど、「特定のカスタム投稿に紐づくタクソノミーのタームを指定した記事一覧(無制限)」として作った。
WPをドメイン直下で作ってるとして、「https://ドメイン/タクソノミー名/ターム名/」で表示される。
<h1><?php single_term_title(); ?></h1>
<?php
$taxonomy_name = get_query_var('taxonomy');
$tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
$term_var = get_query_var( 'term' );
$myQuery = new WP_Query();
$param = array(
'posts_per_page' => '-1',
'post_type' => '【カスタム投稿名】',
'taxonomy' => $taxonomy_name,
'term' => $term_var,
);
$myQuery->query($param);
?>
<?php if($myQuery->have_posts()): ?>
<dl>
<?php while($myQuery->have_posts()) : $myQuery->the_post(); ?>
<dt><span><?php the_title();?></span></dt>
<dd><?php the_content(); ?></dd>
<?php endwhile; ?>
</dl>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
post_typeの指定を外せば汎用的に使える。
$paramのところとか、カスタム投稿の記事一覧とちょっと似てるからそんなに抵抗ないと思う。
リンクつきターム一覧の作成
ターム別のページを作るならターム一覧も必要になる。
考え方とか見せ方になってくるんだけど、タームがいっぱいでページを埋めると邪魔くさいなと。アコーディオンにしてもスマホじゃどうも、画面を埋め尽くすのはなあと。一覧としては見づらいけど、selectに格納するのが良いんじゃないかと最近思うようになった。
<?php
$taxonomy_terms = get_terms('【タクソノミー名】','order=DESC');
if(!empty($taxonomy_terms)&&!is_wp_error($taxonomy_terms)):
?>
<select onChange="location.href=value;">
<?php foreach($taxonomy_terms as $taxonomy_term): ?>
<option value="<?php echo get_term_link($taxonomy_term); ?>" <?php if($taxonomy_term->slug === $term): echo 'selected'; endif; ?>><?php echo $taxonomy_term->name; ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
「selectで選んだタームのページに遷移する。表示している内容がselectedになる。」
「order=DESC」で並びを指定してるんで、変更したければここをいじる。
他にも指定したいなら配列を作って読ませる方がわかりやすい。
<?php
$args = array(
'order' => 'DESC'
);
$taxonomy_terms = get_terms('【タクソノミー名】',$args);
作ってみての感想
組み方が悪いのかややこしいものを拾おうとしてるのか、処理がやや重い気がする。
固定ページとかでURLパラメータを拾って取得条件にタームを突っ込んだ方が軽いかもしれない。
コメント