使うような使わないような。
どういうアレか
記事一覧ページがある。
大体は2カラムで構成されていて、メインに記事一覧、サイドに新着○件とかタグ一覧とかカテゴリー一覧とかがついてたりする。記事ページに飛んだらメイン部に記事が表示されて、サイドは据え置き。
当ブログもそうだし、ブログサービスだと一般的な構成ですね。
一般的なのでこれでいいといえば良いんだけど、シンプルに組みたい場合もある。記事一覧は必須、あとはカテゴリー(タグ)が選べたらいいやみたいな、1カラムで済ませられる感じ。新着情報コンテンツにその傾向が多い。逆に2カラムに分けても載せるものがなくて辛い。
この場合厄介なのはカテゴリー一覧で、投稿していけばバリエーションは増えていく。増えたら掲載領域は増えるしあれば便利だから上部に置きたいけど基本的には新着順でしか見なくて邪魔くさい、でも下部に並べるのも存在感が示せないからどうなんでしょうと。
<select>とjsでうまいことやると、valueにURLを仕込んでおいて、選択したoptionによりそれぞれの一覧に飛ばす物が作れる。
これでカテゴリー一覧をまとめてしまえば場所を取らないし、上部に設置すれば今何が表示されてるかが分かるわけで、むしろ良いんじゃないのって感じになる。
それをやる方法。
前提
アーカイブを有効にしたカスタム投稿で作ることとする。
今それで組んでるから、流用して記事を書くのが楽というだけのことなんだけど。
archive.php用
ここで表示するものは「すべての記事」なので、通常で言う「選択してください」状態で設置する。
<select onChange="location.href=value;">
<option value="【一覧ページURL】">すべての記事</option>
<?php
$terms = get_terms('【タクソノミースラッグ】');
foreach ( $terms as $term ) {
echo '<option value="'.get_term_link($term).'">'.$term->name.'</option>';
}
?>
</select>
カスタム投稿「blog」タクソノミー「blog-tag」で作ったとすればこんな感じ。
<select onChange="location.href=value;">
<option value="<?php echo esc_url( home_url('/blog/') ); ?>">すべての記事</option>
<?php
$terms = get_terms('blog-tag');
foreach ( $terms as $term ) {
echo '<option value="'.get_term_link($term).'">'.$term->name.'</option>';
}
?>
</select>
実際に使用する場合は「archive-【カスタム投稿スラッグ】.php」にして、専用のものとして使う。スラッグを直接指定してるからね。
taxonomy.php用
ターム別なので<select>の初期値は表示してるものと合致させたい。
<select onChange="location.href=value;">
<option value="【一覧ページURL】">すべての記事</option>
<?php
$term = wp_get_object_terms($post->ID, '【タクソノミースラッグ】');
$termEqual = $term[0]->name;
$termsLink = get_terms('【タクソノミースラッグ】');
foreach ( $termsLink as $termLink ) {
if($termLink->name == $termEqual){ $selected = 'selected'; }else{ $selected = ''; }
echo '<option value="'.get_term_link($termLink).'" '.$selected.'>'.$termLink->name.'</option>';
}
?>
</select>
該当のoptionにselectedをつけるには現在表示してるものと一覧の中身を照合しなきゃいけないわけで、だからちょっとめんどくさい。
こっちも実際に組み込む場合は「taxonomy-【タクソノミースラッグ】.php」にして、専用のものとして使う。
改善案
タクソノミーの指定は仕方ないとしても、カスタム投稿のスラッグとかURLはベタ打ちじゃなくても引っ張ってこれると思う。ここをいじれたらもうちょい使いまわしが楽かなって。
コメント