サポート » 使い方全般 » 現在のカテゴリーのサブカテリスト

  • 上記のようなカテゴリー構造だとします。
    この場合のカテゴリーテンプレートにて、wp_list_categoriesで下記のように出力したいのですが、どのように記述すればよいでしょうか?

    カテゴリーA
    └サブカテゴリーAA
    └サブカテゴリーAB
    └サブカテゴリーAC

    カテゴリーB
    └サブカテゴリーBA
    └サブカテゴリーBB
    └サブカテゴリーBC

    表示↓

    カテゴリーA

    AA
    ・AA記事1 任意数のリンク付きタイトル(以下同)
    ・AA記事2
    ・AA記事3

    AB
    ・AB記事1
    ・AB記事2
    ・AB記事3

    AC
    ・AC記事1
    ・AC記事2
    ・AC記事3

    いろいろ調べてみたのですが、ありそうでないパターンでしたので、どうぞよろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター gatespace

    (@gatespace)

    こんにちは。
    wp_list_categories はカテゴリー一覧をリスト表示にするためのタグですので、提示されたように記事も出すのであれば、get_categories で、カテゴリー一覧を取得し、カテゴリーをループしつつカテゴリー毎に get_posts してください。
    (ただし、カテゴリーが多くなると重くなるかも知れません。)

    ※一例(未検証です)

    <php
    $root_cat_args = array(
    	'taxonomy' => 'category',
    	'parent'     => 0, //トップレベルのカテゴリーのみ
    	'hide_empty' => 0
    );
    $root_cat_lists = get_categories( $root_cat_args );
    
    foreach($root_cat_lists as $root_cat) : // トップレベルのカテゴリーのループ
    	echo "<p>".$root_cat->name."</p>";
    	$child_cat_args = array(
    		'taxonomy' => 'category',
    		'parent'    => $root_cat->term_id,
    		'hide_empty' => 0
    	);
    	$child_cats = get_categories( $child_cat_args );
    	foreach($child_cats as $child_cat) : // 子カテゴリのループ
    		$args = array(
    			'cat' => $child_cat->term_id
    		);
    		$my_posts = get_posts( $args );
    		global $post; // テンプレートファイル内なら書かなくても良い
    		if ( $my_posts ) { // 該当する投稿があったら
    			foreach ( $my_posts as $post ) :
    				setup_postdata( $post );
    				/* the_title(), the_permalink() 等使用可 */
    			endforeach; // 投稿のループ終わり
    		}
    		wp_reset_postdata();
    	endforeach; // 子カテゴリのループ終わり
    endforeach; // 親カテゴリのループ終わり
    ?>

    トピック投稿者 rqcmt

    (@rqcmt)

    gatespaceさまありがとうございます。

    get_categories で一覧を取得しループしつつカテゴリー毎に get_postsということなのですね。考え方は理解できました。

    実際に使ってみたのですが、35行目の// トップレベルのカテゴリーのループ
    あたりでsyntax errorになってしまい、自分でいろいろやってみたのですが、お恥ずかしながら解決できませんでした。

    構文の基本的な書き方ということになるかと思いますが、お手すきの際がありましたら、ご助言くだされば幸いです。

    モデレーター gatespace

    (@gatespace)

    echo "<p>".$root_cat->name."</p>";
    echo行の最後にセミコロンが抜けてました。

    トピック投稿者 rqcmt

    (@rqcmt)

    ありがとうございました。ただ出力はトップレベルのカテゴリーがpタグで出力されているという形になってしまったのですが、これをベースに少し試行錯誤してみます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「現在のカテゴリーのサブカテリスト」には新たに返信することはできません。