ワードプレスのカスタム投稿で子カテゴリーの記事内容一覧をテンプレート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>



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

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2013/10/21 15:38:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント500pt

「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」は共通表示用のテンプレートにした方がいいと思います。

id:kamefactory

ありがとうございます!
思う通りに表示されました。

子カテゴリーのみの一覧ページに表示させるには同コードでは表示されませんよね?どのようなコードにすればよろしいでしょうか?

http://WordPressのURL/bookcat/sf/japan/」にjapanカテゴリーだけの記事一覧も表示させたいのです。

パンくずリスト

home > bookcat > sf > japan > 個別記事

を設置しているので、japanのみのアーカイブページも必要なんです。

テンプレートは各カテゴリーで分けております。

よろしくお願いします。

2013/10/21 14:53:25
id:kamefactory

すいません。
上記補足ですが、自己解決できました。

この度は本当にありがとうございました。
またよろしくお願いします。

2013/10/21 15:38:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません