• 親子関係にあるカテゴリーの子カテゴリートップに記事一覧を表示させたいと思いました。
    子カテは現在2つなので下記を「category.php」に書くことで何とかいけたのですが、子カテは増えそうだということが見えてきました。

    追加の度にソースを追加するのはできれば避けたい。
    本来であれば引数部分に子カテゴリーのスラッグが自動で入るようになれば…と思ったのですがそれがどうしても出来ず。

    <?php if( is_category( 'cate01' ) ): ?>
      <?php query_posts('category_name=cate01&posts_per_page=20&order=ASC&paged='.$paged); ?>
    <?php elseif( is_category( 'cate02' ) ): ?>
      <?php query_posts('category_name=cate02&posts_per_page=20&order=ASC&paged='.$paged); ?>
    <?php endif; ?>
    
    <?php if( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div>
      <a href="<?php the_permalink(); ?>">
        <?php the_post_thumbnail(); ?><?php the_title(); ?>
      </a>
    </div>
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    カテゴリーのスラッグを出力させるのは下記で出来たのですが、これを組み込むのが正解かどうか、そもそもどうやって組み込めば良いのか分からず力尽きてしまいました。

    <?php $category = get_the_category(); $cat_slug = $category[0]->category_nicename; ?>
    <?php echo $cat_slug; ?>

    書き方のご指南、もしくは他に効率よい手段があれば教えていただければ幸いです。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 現在のコードで query_posts() の引数に $paged と言う変数を含めていますよね。
    それと同様の書き方でカテゴリーのスラッグも変数として含めることができます。

    $category = get_the_category();
    $cat_slug = $category[0]->category_nicename;
    
    $arg = 'category_name=' . $cat_slug . '&posts_per_page=20&order=ASC&paged=' . $paged;
    
    query_posts( $arg );
    
    トピック投稿者 shinkichi

    (@shinkichi)

    早々のご回答ありがとうございました。
    なるほど、と納得のいくお答えでとても勉強になりました。
    これで動いてくれたと思ったのですが、こちらの何かが問題だと思うのですが、子カテページを表示させても親のスラッグを出力してしまっているようなのです。

    <?php $category = get_the_category(); $cat_slug = $category[0]->category_nicename; ?>
    <?php echo $cat_slug; ?>

    出力のテストをかねて残していたので、それが判明したのですが。

    しかし最初の一つ一つ書く手段であれば記事一覧は出るものの、上記で出力したスラッグは親カテのまま。
    一体何が起こっているのか…厳密に子カテゴリーのスラッグを出力しないといけないのでしょうか?
    でもスラッグはスラッグだから親も子も関係ないと思うのですが…

    一体何が起こっているのか

    記事にカテゴリーを1つだけ(子カテゴリーだけ)付けてある場合も、親カテゴリーのスラッグが出ますか?

    記事に2つ以上のカテゴリー、例えば親と子の両方を付けてあると、そのコードで $category[0] に必ず子が来るとは限りません。$category[1]->category_nicename も確かめてみてください。

    記事につけるカテゴリーを1つにすればシンプルですよ。2つ以上カテゴリーをつけておきたいなら、「親カテゴリーは飛ばして子カテゴリーを見つける」ためのコードを追加しましょう。

    • この返信は8年、 6ヶ月前にgblsmが編集しました。
    • この返信は8年、 6ヶ月前にgblsmが編集しました。
    トピック投稿者 shinkichi

    (@shinkichi)

    親子二つのカテゴリーにチェックが入っておりました…
    1つだけにしたら、子のスラッグがでました。
    これが原因のようですね。
    最悪、親のチェックをはずそうと思うのですが、
    「2つ以上カテゴリーをつけておきたいなら、
    親カテゴリーは飛ばして子カテゴリーを見つけるためのコードを追加」
    というのは可能なのでしょうか?

    可能だと思いますよ。
    必ずカテゴリーを親と子の2つだけつける、という条件がつきますが(1つや3つ以上はダメ) $category[0] が親なら飛ばして $category[1] を見るようにすれば良いでしょう。

    <?php
    $cat = $category[0];  // 仮に [0] を選ぶ
    // $category[0] に子カテゴリーがあるか調べる
    $args = 'parent=' . $cat->term_id;
    $childcats = get_categories( $args );
    if ( $childcats ) {
      // 子カテゴリーがある、つまり親カテゴリー。
      $cat = $category[1];  // [1] を見るように変える。
    } else {
      // 子カテゴリーがない、つまり子カテゴリー。
      // $cat をそのままにしておく。
    }
    $cat_slug = $cat->slug;  // カテゴリーのスラッグ
    ?>
    
    • この返信は8年、 6ヶ月前にgblsmが編集しました。理由: コード誤りを修正
    トピック投稿者 shinkichi

    (@shinkichi)

    お礼が大変遅くなってしまいまして申し訳ございません。
    丁寧なご回答にも感謝です。ありがとうございます。
    カテゴリーを二つ選択していても表示させることができました。
    しかし二つ選択していると今度はパンくずに支障が出てくることが判明したので、
    今回は子カテだけ選択するという手段をとらせていただくことにしました。
    昨日ご提示いただいたソースで問題なく表示させることが出来ました。

    と思ったのですが…
    記事のないカテゴリーを表示させると、全部の記事が表示される事態になってしまいました。
    しかもスラッグをテストで出力させるために書いていたソースでの出力がされておりませんでした。
    記事がないからスラッグが出力されないということなのでしょうか?
    こうなると自力での解決は難しそうなので、記事のないカテは表示させないのが良いようです。
    そもそも記事がないならカテゴリーページを表示させる方が不親切なのですが、
    今回は記事がなくてもそのカテゴリーの説明テキストを載せる予定だったものですから。

    とにもかくにも、ありがとうございました!

    • この返信は8年、 6ヶ月前にshinkichiが編集しました。

    記事のないカテゴリーを表示させると、全部の記事が表示される事態になってしまいました。

    新しく質問トピックを始めてはいかがですか。
    どのテーマのどのテンプレートファイルにどんなコードを書いたかを添えて。

7件の返信を表示中 - 1 - 7件目 (全7件中)

トピック「それぞれの子カテゴリートップに記事一覧を表示させたい」には新たに返信することはできません。