サポート » 使い方全般 » 特定の親カテゴリーに特定の子カテゴリーを表示したい

  • 解決済 omochi3

    (@omochi3)


    php初心者です。

    タイトルの通りでして…

    親カテゴリー「A」
    – 子カテゴリー「a」
    – 子カテゴリー「b」
    – 子カテゴリー「c」

    親カテゴリー「B」
    – 子カテゴリー「a」
    – 子カテゴリー「b」
    – 子カテゴリー「c」

    という構成で、
    Aのカテゴリーページ(category.php)では親Aに属した子aに属する記事の内容を一覧表示したいです。
    Bのカテゴリーページ(category.php)では親Bに属した子aに属する記事の内容を一覧表示したいです。
    ※記事の内容とは、functions.phpに数行足すことでできるサムネイル追加枠で、
    追加した画像と、記事タイトル、記事内容、記事リンクです。

    初心者ながらいろいろと調べて、かなりいいところまで行ったのですが、
    Aのカテゴリーページで、Aに属した子aに属する記事、Bに属した子aに属する記事の内容が表示される現象にはまってしまいました。Bでも同様です。

    解決策をご教授いただけますと幸いです。
    どこが悪いのかがわかりません…。
    以下、ソースになります。

    <?php
      $cat = get_the_category();
      $cat_current = $cat[0];
      $parent_id = $cat_current->category_parent;
      $child_category = get_term_children($parent_id, 'category');
      foreach ($child_category as $key => $value) {
        $child_category_name = get_category($value)->slug;
        if($child_category_name != 'template' && $child_category_name != 'example') {
          $categories_num .= $value;
        }
      }
      query_posts('cat=' . $categories_num . '&child_of=' . $parent_id);
      if ( have_posts() ) while ( have_posts() ) : the_post();
    ?>
    <li>
    記事の内容
    </li>
    <?php endwhile; wp_reset_query(); ?>
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • get_the_category() 関数は、特定の投稿のカテゴリーを取得します。
    頂戴したコードですと、おそらく一番目の投稿が属するカテゴリーを取得することになるでしょう。(通常ループ内で使用しますね)
    テンプレートタグ/get the category – WordPress Codex 日本語版

    現在アーカイブ表示されているカテゴリーを取得するには get_queried_object() を使ったほうがいいと思います。

    <?php
      // $cat = get_the_category();
      // $cat_current = $cat[0];
      $cat_current = get_queried_object();

    関数リファレンス/get queried object – WordPress Codex 日本語版
    参考: WordPress : get_queried_object()の返り値のまとめ | notnil creation weblog

    あと色々ありそうですが、実装したい内容がまだよく理解できていないのでまた後で見なおしてみます。

    カテゴリー「A」と「B」は親カテゴリーですよね。
    すると、

    $parent_id = $cat_current->category_parent;

    ここでは $parent_id0 になり

    $child_category = get_term_children($parent_id, 'category');

    ここは子カテゴリーが取得できず、$child_category には空の配列が代入されます。
    つまり以降の foreach は全く機能していないことになりますね。
    そうなると $categories_num は未定義の変数となり、query_posts の引数は cat=&child_of=0 となりほとんど何もしていないような状態になるかと思われます。

    子カテゴリーa,b,cでの表示はまた別の対応が必要だと思いますが、カテゴリーA,Bでの表示だけを考えると、

    <?php
      $cat_current = get_queried_object();
      $parent_id = $cat_current->term_id; // ←ここ
      $child_category = get_term_children($parent_id, 'category');
      foreach ($child_category as $key => $value) {
        $child_category_name = get_category($value)->slug;
        if($child_category_name != 'template' && $child_category_name != 'example') {
          $categories_num = $value; // 微修正
          break; // 微修正
        }
      }
      query_posts('cat=' . $categories_num . '&child_of=' . $parent_id);

    でうまくいくのでは?(未検証です)

    トピック投稿者 omochi3

    (@omochi3)

    mimosafa様

    ありがとうございます!
    get_the_category() 関数を初めて知りました!

    お教えいただいたコードを入れてみたら、
    うまく行きました!

    また、やりたいことの説明がうまくできずに申し訳ございません…。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「特定の親カテゴリーに特定の子カテゴリーを表示したい」には新たに返信することはできません。