サポート » 使い方全般 » 現在の記事のカテゴリをループ外で取得

  • 解決済 natsu85

    (@natsu85)


    カスタム投稿の個別ページにcategoryを設定しており、ループ外に表示している記事と同じカテゴリのpostの新着情報を表示させたいと思っており、表示は以下でできました。

    <?php
          if( is_single()) :
          $post_id = $post->ID;
          $cats = get_the_category();
          foreach( $cats as $cat ) :
    
          $shopnewslist = get_posts( array(
            'post_type' => 'post',
            'category_name' => $cat->slug,
            'posts_per_page' => 5 //取得記事件数
          ));
          if( !empty( $shopnewslist ) ):
          foreach( $shopnewslist as $post ):
          setup_postdata( $post );
          ?>
          <article class="post_list">
            <a href="<?php the_permalink(); ?>">
              <header class="shopNewsarea_post_header">
                <p class="post_meta">
                  <span class="post_meta_category">
                    <?php $cat = get_the_category(); ?>
                    <?php $cat = $cat[0]; ?>
                    <?php echo get_cat_name($cat->term_id); ?>
                  </span>
                  <time datetime="<?php the_time('Y/m/j') ?>">
                    <?php the_time('Y/m/j') ?>
                  </time>
                </p>
                <h3><?php the_title(); ?></h3>
              </header>
    
            </a>
          </article>
          
          <?php endforeach; ?>
          <p class="btnCenter"><a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_news" class="btn btn_large">お知らせ一覧へ</a><a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_blog" class="btn btn_large">Blog一覧へ</a></p>
    
          <?php elseif( empty( $shopnewslist ) ): ?>
          <article>
            <h3 class="title">記事が見つかりませんでした。</h3>
            <p>検索で見つかるかもしれません。</p>
            <?php get_search_form(); ?>
          </article>
          <?php endif; ?>
          <?php wp_reset_query(); ?>
          
          <?php wp_reset_postdata(); ?>
          <?php endforeach; ?>
          <?php endif; ?>

    ただ上記のコードですと、各一覧へのページへのリンク
    <p class="btnCenter"><a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_news" class="btn btn_large">お知らせ一覧へ</a><a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_blog" class="btn btn_large">Blog一覧へ</a></p>
    のaタグに記述した
    <?php echo $cat->slug; ?>
    が新着情報で取得した直前?の各記事のカテゴリを取得してしまします。

    カテゴリは親子関係になっており、カスタム投稿の記事には親カテゴリを
    postの各記事にはその親の子カテゴリが設定されております。
    各記事

    記事一覧へのリンクを表示させている記事のカテゴリスラッグを取得するには、どのようにすればよいのかご教授お願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 5行目の foreach$cat にカテゴリ情報が代入されていますが、21行目で再び $cat に別の情報が代入されています。
    たとえば、5行目の $cat は外側の foreach 用にし、21行目の $cat は内側の foreach 内だけで使いますから、別の変数名にしましょう。

    ところで、 <time> 要素(25行目)の datetime 属性の値はISO-8601の仕様に従うこととされています。
    https://www.w3.org/TR/NOTE-datetime
    これは YYYY-MM-DD の形式で表され、PHPでは the_time('Y-m-d') とすることで出力できます。
    なお、要素内の日付の書式は自由です。

    LABE様

    お返事ありがとうございました。

    5行目の'category_name' => $cat->slug,

    <p class="btnCenter"><a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_news" class="btn btn_large">お知らせ一覧へ</a>
    <a href="<?php bloginfo('url'); ?>/category/<?php echo $cat->slug; ?>/<?php echo $cat->slug; ?>_blog" class="btn btn_large">Blog一覧へ</a></p>

    <?php echo $cat->slug; ?>
    $cat名を変更したところ、無事表示することができました!!

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

    datetime属性に関しては知りませんでした。
    修正致しました。

    LABE様重ねて
    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「現在の記事のカテゴリをループ外で取得」には新たに返信することはできません。