カスタム投稿タイプ
book
カスタムタクソノミー
bookcat
親カテゴリースラッグ
sf
子カテゴリースラッグ
japan
usa
・記事
japan内の記事:A.B.C
usa内の記事:D.E.F
上記の設定時に、taxonomy.phpテンプレートページへ以下のように表示させることにはどうすればいいでしょうか?
//子カテゴリー「japan」内に投稿された記事が並んでいく
<ul>
<li><a href="Aへのリンク">Aタイトル</a></li>
<li><a href="Bへのリンク">Bタイトル</a></li>
<li><a href="Cへのリンク">Cタイトル</a></li>
</ul>
//子カテゴリー「eee」内に投稿された記事が並んでいく
<ul>
<li><a href="Dへのリンク">Dタイトル</a></li>
<li><a href="Eへのリンク">Eタイトル</a></li>
<li><a href="Fへのリンク">Fタイトル</a></li>
</ul>
//子カテゴリー「usa」内に投稿された記事が並んでいく
<ul>
<li><a href="Gへのリンク">Gタイトル</a></li>
<li><a href="Hへのリンク">Hタイトル</a></li>
<li><a href="Iへのリンク">Iタイトル</a></li>
</ul>
よろしくお願いいたします。
「taxonomy.php」を利用して表示させたいという事は、タクソノミーのアーカイブページにアクセスした時に表示するという事で間違いないですね?
※カスタムタクソノミー「bookcat」、親カテゴリースラッグ「sf」という事ですので、「http://WordPressのURL/bookcat/sf/」にアクセスした時に反映されます。
<?php // 子カテゴリのスラッグを指定 $tax_slugs = array( 'japan', 'usa' ); foreach( $tax_slugs as $tax_slug) : // 対象のタクソノミーを指定 $taxonomy = 'bookcat'; // 次行はスラッグからターム(カテゴリー)の名前を取得しています。各リストの前に見出しを出力しなくてもいい場合はコメントアウトするか削除してください。 $term_info = get_term_by( 'slug', $tax_slug, $taxonomy ); $args = array( 'post_type' => 'book', 'nopaging' => true, 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => array( $tax_slug ), ) ) ); query_posts($args); if ( have_posts() ) : ?> // リストの見出しとしてターム名(カテゴリー名)を表示します。 <h2><?php echo $term_info->name; ?></h2> <ul> <?php while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php endif; ?> <?php wp_reset_query(); ?> <?php endforeach; ?><!-- $tax_slugs -->
アクセスしているカテゴリーアーカイブを自動判別してリストを出力したい場合は、上記のコードの代わりに次のコードを試してみてください。
<?php if($wp_query->queried_object->parent == 0) : $term_id = $wp_query->queried_object->term_id; $taxonomy_name = $wp_query->queried_object->taxonomy; $termchildren = get_term_children( $term_id, $taxonomy_name ); foreach ( $termchildren as $child ) : $taxs[] = $child; endforeach; foreach( $taxs as $tax_slug) : // 次行はタームIDからターム(カテゴリー)の名前を取得しています。各リストの前に見出しを出力しなくてもいい場合はコメントアウトするか削除してください。 $term_info = get_term_by( 'id', $tax_slug, $taxonomy_name ); $args = array( 'post_type' => 'book', 'nopaging' => true, 'tax_query' => array( array( 'taxonomy' => $taxonomy_name, 'field' => 'id', 'terms' => array( $tax_slug ), ) ) ); query_posts($args); if ( have_posts() ) : ?> // リストの見出しとしてターム名(カテゴリー名)を表示します。 <h2><?php echo $term_info->name; ?></h2> <ul> <?php while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php endif; ?> <?php wp_reset_query(); ?> <?php endforeach; ?><!-- $taxs --> <?php endif; ?><!-- End of If parent category -->
※上記はどちらのコードもリスト表示に関する部分のみです。(ヘッダー、サイドバー、フッター等については「get_header()」等を記述して読み込む必要があります。)
※「bookcat」以外にもタクソノミーがあるか、あるいは「sf」カテゴリー以外のアーカイブについては別の表示にする場合は、別途テンプレートを用意した方がいいと思います。
すべてのコードを「taxonomy.php」に記述すると、コードが読みにくく修正などメンテナンスするのが難しくなります。
※子カテゴリーアーカイブ用のテンプレートも必要です。
タクソノミーアーカイブのテンプレートは、「taxonomy.php」に優先して「taxonomy-タクソノミー名-{タームスラッグ(カテゴリースラッグ)}.php」あるいは「taxonomy-{タクソノミー名}.php」が利用されるようになっています。
例えば、カスタムタクソノミー「bookcat」、親カテゴリースラッグ「history」の場合、「taxonomy-bookcat-history.php」というテンプレートを作成すると優先して利用されます。
※子カテゴリースラッグが「rome」の場合、「taxonomy-bookcat-rome.php」が利用されます。
※カスタム分類アーカイブにアクセスした時に利用されるテンプレートは次のようになっています。
・テンプレート階層 >> カスタム分類表示
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4#.E3.82.AB.E3.82.B9.E3.82.BF.E3.83.A0.E5.88.86.E9.A1.9E.E8.A1.A8.E7.A4.BA
カスタム分類表示
カスタム分類テンプレート。
- taxonomy-{taxonomy}-{term}.php - 例えば分類名が "sometax"、スラッグが "someterm" の場合は taxonomy-sometax-someterm.php
- taxonomy-{taxonomy}.php - 例えば分類名が "sometax" の場合は taxonomy-sometax.php
- taxonomy.php
- archive.php
- index.php
【追記】
リスト表示するタクソノミーが「bookcat」だけで、その他のタクソノミーはすべて共通の表示になるという場合は、「bookcat」用のテンプレートとして「taxonomy-bookcat.php」を作成し、「taxonomy.php」は共通表示用のテンプレートにした方がいいと思います。
ありがとうございます!
2013/10/21 14:53:25思う通りに表示されました。
子カテゴリーのみの一覧ページに表示させるには同コードでは表示されませんよね?どのようなコードにすればよろしいでしょうか?
「http://WordPressのURL/bookcat/sf/japan/」にjapanカテゴリーだけの記事一覧も表示させたいのです。
パンくずリスト
home > bookcat > sf > japan > 個別記事
を設置しているので、japanのみのアーカイブページも必要なんです。
テンプレートは各カテゴリーで分けております。
よろしくお願いします。
すいません。
2013/10/21 15:38:00上記補足ですが、自己解決できました。
この度は本当にありがとうございました。
またよろしくお願いします。