• 解決済 heppoko

    (@heppoko)


    親子孫カテゴリがあり、下記のように出力したいと思っています。

    ●親カテゴリ
     ●子カテゴリ
      ●孫カテゴリ
       →孫カテゴリに属する記事01
       →孫カテゴリに属する記事02
       →孫カテゴリに属する記事03

    下記ソースで、

    ●親カテゴリ
     ●子カテゴリ
      ●孫カテゴリ

    まではできたのですが、どうしても孫カテゴリに属する記事一覧を出力できず困っております。

    <?php
    $categories = get_terms( 'category', array(
      'hide_empty' => 0,
      'child_of' => ●●(親カテID),
      'orderby' => $terms->count,
     ) );
    $in_p = false;
    foreach($categories as $category){
      if($category->parent == ●●(親カテID)) {
        if($in_p){
          echo '</ul></div>';
          $in_p = false;
        }
          $in_p = true;
          echo "<div>";
          echo "<p><a href=\"".get_category_link($category->term_id)."\">$category->name</a></p>";
          echo '<ul>';
      }else{
        echo "<li><a href=\"".get_category_link($category->term_id)."\">$category->name</a></li>";
      }
    }
    echo '</ul></div>';
    $in_p = false;
     ?>

    お分かりの方がいらっしゃいましたら、ご教授いただければ幸いです。
    よろしくお願いいたします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • ご希望の内容がちょっとはっきりしないので説明を補っていただけますか?
    今のところは以下のような内容かなと思っていますが。

    • 孫カテゴリーのカテゴリーアーカイブページをそのような表示にしたい。
    • 複数の孫カテゴリーで共通にしたいので category.php テンプレートにコードを書いている。
    • 親カテゴリー、子カテゴリーのカテゴリーアーカイブページは別の表示内容にするが、今のところは孫カテゴリーだけをどうするか考えているところ。
    トピック投稿者 heppoko

    (@heppoko)

    レスが遅くなってしまってすみません。
    自分で読み返して、どこで何をしたいのかを書いておりませんでした。
    すみませんです。

    これを使ってサイトマップやサイドバーに表示させたいと思っているのです。
    しかももっと細かく言いますと、サイトマップでは孫の記事一覧まで出すけれど、サイドでは子カテゴリまでしか出さないなどが出来ればとは思っておりました。

    しかしひとまずは親カテのタイトル(一覧ページへのリンク付)、子カテのタイトル(一覧ページへのリンク付)、孫カテのタイトル(一覧ページへのリンク付)、その下に孫カテに属する記事一覧を表示、が目標です。

    ですので現状、固定ページでテストをしております。
    複数の場所で使いたいと思っているので、サイトマップ用のプラグインなどの使用は考えておりません。

    これでお応えになりましたでしょうか?

    検証したコードです。マークアップは手抜きしました。

    <?php
    // 先祖カテゴリーを取得する
    $magocat = get_category_by_slug( 'mago-cat' );
    $ancestors = get_ancestors( $magocat->term_id, 'category' );
    if ( count( $ancestors ) != 2 ) {
    	echo '<div>孫カテゴリーではありません。</div>';
    } else {
    	// 親カテゴリーのタイトルとアーカイブリンクを表示
    	echo '<div>親カテゴリー名: ', get_the_category_by_ID( $ancestors[1] ), '</div>';
    	echo '<div>アーカイブ: ', get_category_link( $ancestors[1] ), '</div>';
    	// 子カテゴリーのタイトルとアーカイブリンクを表示
    	echo '<div>子カテゴリー名: ', get_the_category_by_ID( $ancestors[0] ), '</div>';
    	echo '<div>アーカイブ: ', get_category_link( $ancestors[0] ), '</div>';
    	// 孫カテゴリーのタイトルとアーカイブリンクを表示
    	echo '<div>孫カテゴリー名: ', $magocat->name, '</div>';
    	echo '<div>アーカイブ: ', get_category_link( $magocat->term_id ), '</div>';
    	// 孫カテゴリーの投稿一覧を表示
    	$args = array( 'category__in' => $magocat->term_id );
    	$myposts = get_posts( $args );
    	if ( empty( $myposts ) ) {
    		echo '<div>投稿がありません。</div>';
    	} else {
    		foreach ( $myposts as $p1 ) {
    			echo '<div>投稿ID: ', $p1->ID, '</div>';
    			echo '<div>タイトル: ', $p1->post_title, '</div>';
    		}
    	}
    }
    ?>

    トピック投稿者 heppoko

    (@heppoko)

    ご回答ありがとうございます。
    時間がなくてすぐに検証できないのですが、ひとまずのお礼をと思っての書き込みです。
    検証後、改めて返信させていただきます。

    すみません、一部勘違いして先ほどのコードを書いてしまいました。「何々カテのタイトル(一覧ページへのリンク付)」の一覧ページというのは、何々カテゴリーと同レベルのカテゴリーだけを一覧表示するんですね。それは heppoko さんの最初のコードがいいですね。でも get_terms() の child_of パラメータの代わりに parent パラメータを使うとシンプルになると思います。

    トピック投稿者 heppoko

    (@heppoko)

    ご回答ありがとうございました。
    お礼が大変遅くなってしまってすみません。

    ●ご呈示いただいたソースだとカテゴリーが増える度に書き足さないといけない
    ●孫カテゴリ名はリストタグで出力したい
    ●そのリストの中に、さらにリストタグで孫カテに属する記事一覧を出したい
    ●孫カテに属する記事一覧のリンクがない

    と言う追加事項を加えた上で自力で解決出来ないかと悪戦苦闘の結果、おそろしく時間がかかってしまいました。

    でもようやく、本当にようやくなのですが、自分の呈示したソースといただいたご回答を合体させることで、ひとまず思うように出力することが出来ました。

    重ね重ねありがとうございました。

    heppokoさん、思ったとおりに表示できるようになってよかったです。
    差し支えなければ、今後のフォーラム利用者の参考となるように、最終的なコードを示していただきたいと思います(伏字は大丈夫です)。
    それから、この画面の右サイドで「解決済み」にしていただけますか。ご協力をお願いします。

    トピック投稿者 heppoko

    (@heppoko)

    つたないソースで恐縮ですが…

    <?php
    $categories = get_terms( 'category', array(
      'hide_empty' => 0,
      'child_of' => ●●(親カテID),
      'orderby' => $terms->count,
      'order = DESC',
     ) );
    $in_p = false;
    foreach($categories as $category){
      if($category->parent == ●●(親カテID)) {
        if($in_p){
          echo '</ul></div><!-- /.inner -->';
          $in_p = false;
        }
          $in_p = true;
          echo "<div class=\"inner\">";
          echo "<p class=\"inner_title\"><a href=\"".get_category_link($category->term_id)."\">$category->name</a></p>";
          echo '<ul class="sub">';
      }else{
        echo "<li><a href=\"".get_category_link($category->term_id)."\">$category->name</a>";
        echo '<ul class="subsub">';
    		$args = array( 'category__in' => $category->term_id, 'order' => 'DESC', );
    		$myposts = get_posts( $args );
    		if ( empty( $myposts ) ) {
    
    		} else {
    			foreach ( $myposts as $p1 ) {
    				echo '<li><a href="' .get_permalink($p1->ID). '">' . $p1->post_title .'</a></li>';
    			}
    		}
        echo '</ul></li>';
      }
    }
    echo '</ul></div><!-- /.inner -->';
    $in_p = false;
     ?>

    heppokoさん、コードの公開ありがとうございました。これが直接・間接に役立つフォーラム参加者がきっといますよ。
    (つたないなんて気にするより、動くコードを投稿して、これをスマートにするには?って質問すると良いと思います。)

    トピック投稿者 heppoko

    (@heppoko)

    なるほどと納得してしまいましたw
    本当は、孫カテの記事一覧で出力する、

    echo '<li><a href="' .get_permalink($p1->ID). '">' . $p1->post_title .'</a></li>';

    これの「$p1->post_title」ここを、カスタムフィールドで入力した内容を表示させたかったのですが、さすがにそこまでは実現できませんでした。

    post_customなのか、get_post_customなのか…ということよりも、このソースに付け加える、カスタムフィールドの値を引っ張ってくるソースの書き方がどうにもこうにも分からず断念しました。とりあえず、記事タイトルを出力できるのでよしとしたのですが。

    ともあれ、重ね重ねありがとうございました!

    カスタムフィールドの値を引っ張ってくるソースの書き方

    新しくトピックを立てればいいんじゃないでしょうか。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「親子孫のカテゴリ名を出しつつ、孫の記事一覧を出力したい」には新たに返信することはできません。