サポート » 使い方全般 » 特定のカテゴリーの子カテゴリーの記事リストを作りたい。

  • 解決済 youcancan

    (@youcancan)


    wordpress、phpに詳しい方教えてください。
    特定のカテゴリー(idが11)の子カテゴリーの記事リストを作りたいのですが、うまくいきません。
    (プラグインでabcと言う投稿タイプを作成済みです。)
    phpは正直よくわかっておらず、いろんなサイトを見ながらいじっています。

    いろいろと試してみたのですが、うまくいかず、どなたか助けていただけないでしょうか。

    今現在のコードは下記です。
    タイトルは表示されたのですが、記事の一覧がうまく表示できません。
    よろしくお願い致します。

    category-11.php

    <?php $cat_info = get_the_category();
    $cat_term = $cat_info[0] -> category_parent;
    $cat_info = get_categories('child_of='.$cat_term.'&orderby=order');
    foreach ($cat_info as $category) { if($category->count != 0) : ?>
    <h2><?php echo $category->cat_name; ?>のページ一覧</h2>
    <ul>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endif; ?>
    
    </ul>
    <?php }; ?>

    functions.php

    function change_posts_per_page($query) {
     if( is_admin() || ! $query->is_main_query() ){
         return;
     }
     
    if ( $query->is_category(11) ) {
         $query->set( 'posts_per_page', '10' );
         $query->set( 'post_type','abc' );
         return;
     }
     
    }
    add_action( 'pre_get_posts', 'change_posts_per_page' );
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • LABE

    (@latobeam)

    確認ですが、カテゴリー「ID:11」に子カテゴリーがあり、子カテゴリーに投稿タイプ「abc」が属していて、カテゴリー「ID:11」のアーカイブページで、(すべての)子カテゴリーに属する「abc」のリストを表示したい、ということでしょうか。
    また、下段のソースの7行目に $query->set( 'posts_per_page', '10' ); とありますが、これはカテゴリー「ID:11」のアーカイブページで、カテゴリー「ID:11」のそれぞれの子カテゴリーに属する「abc」を取得する数を10個にしたい、ということでしょうか。

    そもそも「タイトルは表示された」というのは本当なのでしょうか。
    上段のソースの2行目で現在のカテゴリーの親カテゴリーのIDを取得し、3行目でその親カテゴリーの子孫カテゴリーを取得していますが、それだと得られるカテゴリーは「ID:11」の子ではなく、兄弟(自身を含む)になりそうなのですが。

    ともあれ、上記の仮定が正しければ、俺ならこう書きます。

    category-11.php

    <?php
    global $wp_query;
    $cats = get_categories('hide_empty=1&child_of='.$wp_query->get_queried_object_id());
    foreach ( $cats as $cat ) {
      $my_query = new WP_Query(array(
        'cat' => $cat->term_id,
        'posts_per_page' => 10,
        'post_type' => 'abc',
      ));
      if ( $my_query->have_posts() ) {
    ?>
    <h2><?php echo $cat->name; ?>のページ一覧</h2>
    
    <?php } } ?>

    これで functions.php の部分は要らなくなると思います。
    (間違ってたらツッコミを入れてください)

    • この返信は7年、 2ヶ月前にLABEが編集しました。
    • この返信は7年、 2ヶ月前にLABEが編集しました。
    LABE

    (@latobeam)

    ごめんなさい、コードの書き方をミスりました……もう一度投稿します。

    category-11.php

    <?php
    global $wp_query;
    $cats = get_categories('hide_empty=1&child_of='.$wp_query->get_queried_object_id());
    foreach ( $cats as $cat ) {
      $my_query = new WP_Query(array(
        'cat' => $cat->term_id,
        'posts_per_page' => 10,
        'post_type' => 'abc',
      ));
      if ( $my_query->have_posts() ) {
    ?>
    <h2><?php echo $cat->name; ?>のページ一覧</h2>
    
    <?php } } ?>
    • この返信は7年、 2ヶ月前にLABEが編集しました。
    LABE

    (@latobeam)

    あれれ……うまくいかないですね……ごめんなさい。

    Pastebin に書きました。
    http://pastebin.com/xWgDDxQY

    トピック投稿者 youcancan

    (@youcancan)

    LABEさん、お正月休みに迅速な回答ありがとうございます!
    早速試してみましたが、やりたかったことが実装できました。
    コードの意味は理解できていないのですが、これから調べてphp勉強します。
    本当にありがとうございました!!

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