人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ワードプレスのカスタム投稿で子カテゴリーの記事内容一覧をテンプレートtaxonomy.phpに表示させるコードを教えて下さい。

カスタム投稿タイプ
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>



よろしくお願いいたします。


●質問者: kamefactory
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●500ポイント ベストアンサー

「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

カスタム分類表示

カスタム分類テンプレート。

  1. taxonomy-{taxonomy}-{term}.php - 例えば分類名が "sometax"、スラッグが "someterm" の場合は taxonomy-sometax-someterm.php
  2. taxonomy-{taxonomy}.php - 例えば分類名が "sometax" の場合は taxonomy-sometax.php
  3. taxonomy.php
  4. archive.php
  5. index.php


【追記】

リスト表示するタクソノミーが「bookcat」だけで、その他のタクソノミーはすべて共通の表示になるという場合は、「bookcat」用のテンプレートとして「taxonomy-bookcat.php」を作成し、「taxonomy.php」は共通表示用のテンプレートにした方がいいと思います。


kamefactoryさんのコメント
ありがとうございます! 思う通りに表示されました。 子カテゴリーのみの一覧ページに表示させるには同コードでは表示されませんよね?どのようなコードにすればよろしいでしょうか? 「http://WordPressのURL/bookcat/sf/japan/」にjapanカテゴリーだけの記事一覧も表示させたいのです。 パンくずリスト home > bookcat > sf > japan > 個別記事 を設置しているので、japanのみのアーカイブページも必要なんです。 テンプレートは各カテゴリーで分けております。 よろしくお願いします。

kamefactoryさんのコメント
すいません。 上記補足ですが、自己解決できました。 この度は本当にありがとうございました。 またよろしくお願いします。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ