Title: 親カテゴリーをもとに関連記事を表示する方法
Last modified: 2020年9月5日

---

# 親カテゴリーをもとに関連記事を表示する方法

 *  [nycstadium](https://ja.wordpress.org/support/users/nycstadium/)
 * (@nycstadium)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/)
 * 現在下記のテーマを設定しています。
    [http://lionmedia.fit-jp.com/matome/](http://lionmedia.fit-jp.com/matome/)
 * テーマでは、投稿記事の下にタグをもとに関連記事が表示されるようになっています。
   
   カテゴリーをもとに関連記事を表示させる場合のコードを教えてください。
 * 記事のカテゴリーは、A＞B＞Cと3段階で設定しています。
    親カテゴリーの「A」をも
   とに関連記事を表示させたいです。
 * 個別投稿（single.php）にあった下記コードが関連記事に関するコードです。
 *     ```
       <?php if (get_option('fit_post_related') != 'value2' ) : ?>
       <!-- 関連記事 -->
       <?php
       // 総件数
       if ( get_option( 'fit_post_relatedNumber' ) ) {
         $max_post_num = get_option( 'fit_post_relatedNumber' );
       } else {
         $max_post_num = 3;
       }
       // 現在の記事にタグが設定されている場合
       if ( has_tag() ) {
         // 1.タグ関連の投稿を取得
         $tags = wp_get_post_tags( $post->ID );
         $tag_ids = array();
         foreach ( $tags as $tag ):
           array_push( $tag_ids, $tag->term_id );
         endforeach;
         $tag_args = array(
           'post__not_in' => array( $post->ID ),
           'tag__not_in' => $tag_ids,
           'posts_per_page' => $max_post_num,
           'tag__in' => $tag_ids,
           'orderby' => 'rand',
         );
         $rel_posts = get_posts( $tag_args );
         // 総件数よりタグ関連の投稿が少ない場合は、カテゴリ関連の投稿からも取得する
         $rel_count = count( $rel_posts );
         if ( $max_post_num > $rel_count ) {
           $categories = get_the_category( $post->ID );
           $category_ID = array();
           foreach ( $categories as $category ):
             array_push( $category_ID, $category->cat_ID );
           endforeach;
           // 取得件数は必要な数のみリクエスト
           $cat_args = array(
             'post__not_in' => array( $post->ID ),
             'posts_per_page' => ( $max_post_num - $rel_count ),
             'category__in' => $category_ID,
             'orderby' => 'rand',
           );
           $cat_posts = get_posts( $cat_args );
           $rel_posts = array_merge( $rel_posts, $cat_posts );
         }
       } else { // 現在の記事にタグが設定されていない場合
   
         $categories = get_the_category( $post->ID );
         $category_ID = array();
         foreach ( $categories as $category ):
           array_push( $category_ID, $category->cat_ID );
         endforeach;
         // 取得件数は必要な数のみリクエスト
         $cat_args = array(
           'post__not_in' => array( $post->ID ),
           'posts_per_page' => ( $max_post_num ),
           'category__in' => $category_ID,
           'orderby' => 'rand',
         );
         $cat_posts = get_posts( $cat_args );
         $rel_posts = $cat_posts;
       }
   
       echo '<aside class="related">';
       echo '<h2 class="heading heading-primary">関連する記事</h2>';
   
       // 1件以上あれば
       if ( count( $rel_posts ) > 0 ) {
         echo '<ul class="related__list">';
         if ( !$myAmp && is_active_sidebar( 'related-ad' ) ) {
           dynamic_sidebar( 'related-ad' );
         }
         foreach ( $rel_posts as $post ) {
           setup_postdata( $post );
           // thumbnailサイズの画像内容を取得
           $thumbnail_id = get_post_thumbnail_id();
           $thumb_img = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail' );
           // サムネイル画像出力
           $thumb_src = $thumb_img[ 0 ];
           $thumb_width = $thumb_img[ 1 ];
           $thumb_height = $thumb_img[ 2 ];
           ?>
       <li class="related__item"> <a class="related__imgLink" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
         <?php if(has_post_thumbnail()) : ?>
         <?php if($myAmp){echo '<amp-img layout="responsive"';}else{echo '<img';} ?>
         src="<?php echo $thumb_src; ?>" alt="
         <?php the_title(); ?>
         " width="<?php echo $thumb_width; ?>" height="<?php echo $thumb_height; ?>" >
         <?php if($myAmp){echo '</amp-img>';}?>
         <?php else :?>
         <?php if($myAmp){echo '<amp-img layout="responsive"';}else{echo '<img';} ?>
         src="<?php echo get_template_directory_uri(); ?>/img/img_no_thumbnail.gif" alt="NO IMAGE" width="160" height="160" >
         <?php if($myAmp){echo '</amp-img>';}?>
         <?php endif; ?>
         </a>
         <h3 class="related__title"> <a href="<?php the_permalink(); ?>">
           <?php the_title(); ?>
           </a>
           <?php if (get_option('fit_post_time') != 'value2' ) :	?>
           <span class="icon-calendar">
           <?php the_time('Y.m.d'); ?>
           </span>
           <?php endif; ?>
         </h3>
         <p class="related__contents"><?php echo mb_substr(get_the_excerpt(), 0, 75); ?>[…]</p>
       </li>
       <?php
       }
   
       echo '</ul>';
       }
       else {
         echo '<p class="related__contents related__contents-max">関連記事はありませんでした</p>';
       }
   
       echo '</aside>';
       ?>
       <?php wp_reset_postdata();?>
       <!-- /関連記事 -->
       <?php endif; ?>
       ```
   

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

 *  トピック投稿者 [nycstadium](https://ja.wordpress.org/support/users/nycstadium/)
 * (@nycstadium)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666480)
 * PHPに関する知識がなく、こちらにてご投稿させていただきました。
    何卒よろしくお願い
   申し上げます。
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666481)
 * こんにちは
 * 下記のように変更されてはどうでしょうか？
 *     ```
       // 現在の記事にタグが設定されている場合
       if ( has_tag() ) {
       ```
   
 * ↓
 *     ```
       // 現在の記事にタグが設定されている場合
       if ( false ) {
       ```
   
 *  トピック投稿者 [nycstadium](https://ja.wordpress.org/support/users/nycstadium/)
 * (@nycstadium)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666483)
 * [@ishitaka](https://ja.wordpress.org/support/users/ishitaka/)様
 * おはようございます。
    アドバンスいただきまして誠にありがとうございます。 ご指示
   いただきました通りに記述したのですが、「関連する記事はありません」と表示され関連
   記事が表示されませんでした。
 * 自分なりにいろいろと調べてみまして、
 *     ```
       // 現在の記事にタグが設定されている場合
       if ( has_tag() ) {
       ```
   
 * ↓下記のように記述を変更してみました
 *     ```
       // 現在の記事にタグが設定されている場合
       	  if ( has_category() ) {
       $cats = get_the_category();
       $cat = $cats[0];
       if($cat->parent){
       $parent = get_category($cat->parent);
       }else{
       echo $cat->cat_name;
       }
       ```
   
 * 関連記事が表示されるようになったのですが、全カテゴリーを引っ張ってきているよう
   でした。
    親のみを関連記事で表示はされませんでした。
 * 該当の記事のパンくずでは
    HOME＞A＞B＞Cとなっており、カテゴリー設定では、Cの親
   カテゴリーはBとなりますが、 Aのカテゴリーをもとに関連記事を表示できればと思い
   ます。
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666484)
 * > Aのカテゴリーをもとに関連記事を表示できればと思います。
 * こういうことでしょうか？
 *     ```
       // 現在の記事にタグが設定されている場合
       if ( has_tag() ) {
       ・・・
       } else { // 現在の記事にタグが設定されていない場合
       ```
   
 * ↓
 *     ```
       // 現在の記事にタグが設定されている場合
       if ( has_category() ) {
       	$cats = get_the_category();
       	$cat = $cat[0];
       	$ancestor_cat_id = array_pop( get_ancestors( $cat->cat_ID, 'category' ) );
       	$cat_args = array(
       		'post__not_in' => array( $post->ID ),
       		'posts_per_page'=> ( $max_post_num ),
       		'category__in' => $ancestor_cat_id,
       		'orderby' => 'rand',
       	);
       	$rel_posts = get_posts($cat_args);
       } else { // 現在の記事にタグが設定されていない場合
       ```
   
 *  トピック投稿者 [nycstadium](https://ja.wordpress.org/support/users/nycstadium/)
 * (@nycstadium)
 * [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666485)
 * ＞@ishitakaさま
    度々、ご返信いただきまして誠にありがとうございます。 とてもうれしい
   です。
 * 記載していただきましたコードをコピペしてみましたが、「関連記事はありませんでした」
   という表示になってしまいました。
 * 私自身もいろいろと調べ、試してみたいと思います。
    引き続きよろしくお願い致します。

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

 トピック「親カテゴリーをもとに関連記事を表示する方法」には新たに返信することはでき
ません。

## タグ

 * [カスタマイズ](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba/)
 * [カテゴリー](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc/)
 * [タグ](https://ja.wordpress.org/support/topic-tag/%e3%82%bf%e3%82%b0/)
 * [ワードプレス](https://ja.wordpress.org/support/topic-tag/%e3%83%af%e3%83%bc%e3%83%89%e3%83%97%e3%83%ac%e3%82%b9/)

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 5件の返信
 * 2人の参加者
 * 最後の返信者: [nycstadium](https://ja.wordpress.org/support/users/nycstadium/)
 * 最後の活動: [6年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e8%a6%aa%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%82%92%e3%82%82%e3%81%a8%e3%81%ab%e9%96%a2%e9%80%a3%e8%a8%98%e4%ba%8b%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#post-11666485)
 * 状態: 未解決

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
