サポート » 使い方全般 » 投稿記事の子カテゴリー(一階層)のみを表示したい

  • 解決済 s.kaneko

    (@skaneko)


    現在カテゴリーが7階層と深い階層になっているため、
    階層の取得に悩んでおります。
    どなたかご教授願えませんでしょうか。

    現在カテゴリ構造は以下のようになります。
    (さらに増える可能性があります)

    AAA
    ∟BBB1
    ∟BBB2
      ∟CCC1
      ∟CCC2
       ∟DDD1
       ∟DDD2
         ∟EEE1
         ∟EEE2
           ∟FFF1
           ∟FFF2
             ∟GGG1
             ∟GGG2

    投稿記事内に関連記事として、
    子カテゴリの記事を取得して載せようと考えております。

    記事AAA には 記事BBB1、記事BBB2のみ表示。
    記事BBB2 には 記事CCC1、記事CCC2のみ表示。
    記事CCC2 には 記事DDD1、記事DDD2のみ表示。
              ・
              ・
              ・
              ・
              
    というように、投稿記事のカテゴリの
    一つ下の階層の子カテゴリーの記事のみ取得したいのです。

    以下のように、

    <?php
    //親カテゴリに属する子カテゴリを配列で取得
    $cat_now = get_the_category();
    $cat_now = $cat_now[0];
    $cat = $cat_now->term_id;
    $subCategories = explode(”, wp_list_categories(‘echo=0&title_li=&style=none&depth=1&parent=’.$cat));

    $catIDs = array();
    $catList = array();

    //正規表現を作成
    $reg = ‘/<a.*?>(.*)?<.*/si’;

    /*
    サブカテゴリ名だけを取得後、
    サブカテゴリに対応するIDを取得して配列に追加
    */
    foreach($subCategories as $cat) {
    if(preg_match($reg, $cat, $value)) {
    //カテゴリ名からIDを取得して配列に追加
    array_push($catIDs, get_cat_ID($value[1]));
    array_push($catList, $cat);
    }
    }

    //ループしてHTMLを作成
    for($i=0; $i<count($catIDs); $i++) {
    ?>

    <ul class=”ul-content-list”>
    <?php if (have_posts()) : query_posts(‘posts_per_page=5&cat=’ . $catIDs[$i] . ‘&orderby=ID&order=desc’); ?>
    <?php while (have_posts()) : the_post(); ?>

    投稿記事の子カテゴリを取得して、
    記事を表示するところまでは出来たのですが、
    全ての子カテゴリ記事が表示されてしまいます。
    投稿記事のカテゴリの直下の子カテゴリ1階層のみ表示するためには
    どのようにしたらよいか、アドバイス頂けないでしょうか。

    宜しくお願いいたします。

    [モデレータより]
    「【重要】お読みください」フォーラムに投稿されていましたので、フォーラムを移動しました。
    「【重要】お読みください」は、WordPress 日本語サイト運営チームから、みなさんへの連絡等に使用していますので、質問があっても回答がつかない場合があります。

    通常の質問は個別のフォーラムへ投稿してください。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • query_postsのパラメータのうち

    cat=カテゴリーID

    の代わりに

    array( 'category__in' => array( カテゴリーID ) )

    を使えば、指定したIDのカテゴリーのみ(その子は含まない)になります。
    日本語Codexのquery_postsの中にある「複数カテゴリーの指定方法」を参考にどうぞ。

    gblsm様

    ありがとうございます!教えて頂いた

    array( 'category__in' => array( カテゴリーID ) )

    を使用して「指定したIDのカテゴリーのみ(その子は含まない)」表示ができました。

    <?php
    //親カテゴリに属するサブカテゴリを配列で取得
    $cat_now = get_the_category();
    $cat_now = $cat_now[0];
    $cat = $cat_now->term_id;
    $subCategories = explode('', wp_list_categories('echo=0&title_li=&style=none&depth=1&parent='.$cat));
    
    $catIDs = array();
    $catList = array();
    
    //正規表現を作成
    $reg = '/<a.*?>(.*)?<.*/si';
    
    /*
     サブカテゴリ名だけを取得後、
     サブカテゴリに対応するIDを取得して配列に追加
    */
    foreach($subCategories as $cat) {
        if(preg_match($reg, $cat, $value)) {
            //カテゴリ名からIDを取得して配列に追加
            array_push($catIDs, get_cat_ID($value[1]));
            array_push($catList, $cat);
        }
    }
    
    //ループしてHTMLを作成
    for($i=0; $i<count($catIDs); $i++) {
    ?>
    
    <div class="related-area">
    <?php if (have_posts()) : query_posts(array( 'category__in' => array( $catIDs[$i] ) ) ,'posts_per_page=5&orderby=ID&order=desc');  ?>
    <?php while (have_posts()) : the_post(); ?>
        <div class="related-article"><a>" class="bluelink"><?php the_title(); ?></a>
        <?php the_content(); ?></div>
    <?php endwhile; endif; wp_reset_query(); ?>
    </div>
    
    <?php } ?>

    本当にありがとうございました。

    解決済みにさせていただきます。

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