Ver1.3.2をリリースしました(1/27)

関連記事に親カテゴリーに属する記事も含める方法

SANGOの関連記事に表示されるのは、初期設定では「同じカテゴリーに属する記事だけ」になります。

関連記事対応A PC

親カテゴリーが存在する場合にも、親カテゴリーの記事までは関連記事に表示されません。もし、親カテゴリーに属する記事も表示させたい場合は、少しカスタマイズを行う必要があります。

SANGOで親カテゴリーの記事まで関連記事に含めるカスタマイズ手順

このカスタマイズにより、関連記事には、以下のリンクが表示されるようになります。

  • 親カテゴリーに属する記事
  • 親カテゴリーに含まれる子カテゴリーに属する記事
  • その記事が属するカテゴリー内の記事

準備

テーマをアップデートしたときにカスタマイズ内容が消えてしまわないように、子テーマを使うようにしましょう。

WordPressで子テーマを活用して安全にカスタマイズを行う方法

また、バックアップも忘れずに取っておきましょう。

WordPressでバックアップを取る4つの方法(初心者向け)
WordPressでバックアップを取る4つの方法(初心者向け)

functions.phpにコードを貼付け

以下のコードを全て子テーマの functions.phpにコピペします。

functions.php
//関連記事に親カテゴリーの記事を表示するように
  function related_posts() {
      global $post;
      $categories = get_the_category();
      if(!$categories) return false;
      $parent_id = $categories[0]->category_parent;//親カテゴリーのID

      if($parent_id){//親カテゴリーが存在する場合
        $cat_ids = get_term_children($parent_id, 'category');//子カテゴリーの全ID
        $all_cat_ids = array();
      	foreach ($cat_ids as $value) {
      		$all_cat_ids[] .= $value;//子カテゴリーのIDを配列に追加
      	}
        $all_cat_ids[] .= $parent_id;//親カテゴリーのIDを配列に追加
      } else {//親カテゴリがない場合はそのカテゴリだけ
        $all_cat_ids = $categories[0]->cat_ID;
      }

      $num = (get_option('num_related_posts')) ? esc_attr(get_option('num_related_posts')) : 6;/*出力数*/
      $related_posts = get_posts(array(
        'category__in' => $all_cat_ids,
        'exclude' => $post->ID, 
        'numberposts' => $num, 
        'orderby'=>'rand'
        ));

    if($related_posts) {
      
      $design = get_theme_mod('related_posts_type') ? esc_attr(get_theme_mod('related_posts_type')) : 'type_a';
      if(get_option('related_no_slider') && ($design != 'type_c')) {
        $design .= ' no_slide';
      }

      if(get_option('related_post_title')) {
        echo '<h3 class="h-undeline related_title">'.get_option('related_post_title').'</h3>';
      }
      
      echo '<div class="related-posts '.$design.'" ontouchstart =""><ul>';

      foreach($related_posts as $related_post):
          $thumbnail = get_post_thumbnail_id( $related_post->ID );
          $src_info = wp_get_attachment_image_src($thumbnail, 'thumb-520');
          $src = $src_info[0];

            if(!$src && get_option('thumb_upload')) {//アイキャッチ画像が無い時は登録されたデフォルト画像を探す
              $search = array('.jpg','.jpeg','.png','.gif','.bmp');
              $replace = array('-520x300.jpg','-520x300.jpeg','-520x300.png','-520x300.gif','-520x300.bmp');
              $src = str_replace($search, $replace , esc_url(get_option('thumb_upload')));

            } elseif(!$src) {//それでも無い場合はテンプレートフォルダから
              $src = get_template_directory_uri() . '/library/images/default_small.jpg';}

          $title = $related_post->post_title;
        ?><li><a href="<?php echo get_permalink($related_post->ID); ?>">
              <figure class="rlmg">
                <img src="<?php echo $src; ?>" alt="<?php echo $title; ?>">
              </figure>
              <div class="rep"><p><?php echo $title ?></p></div>
            </a>
          </li><?php
    endforeach;
    wp_reset_postdata();
    echo '</ul></div>';
    }
  }/* end related posts function */
  //END 関連記事に親カテゴリーの記事を表示するように

カスタマイズはこれだけです。他のファイルを触る必要はありません。
もしかすると今後のテーマのアップデートで、カスタマイザーから簡単に上記の設定をできるようにするかもしれません。

6 Comments

山田

素敵なテーマをありがとうございます!
関連記事ではないのですが、記事下の「前の記事」「次の記事」を、

1.非表示にする
2.同じカテゴリー内での「前の記事」「次の記事」を表示する

このどちらかに変更することは可能でしょうか?
ブログによってはカテゴリーを跨ぐ「前の記事」「次の記事」は
読者にとってあまり意味がないケースがありますので
今後のアップデートの際にご検討頂ければ幸いです。

返信する
サルワカくん

下記のような方法を取ると簡単です。
①子テーマ内に「parts」という名前のフォルダーを作成します。
②「parts」フォルダー内に「single」という名前のフォルダーを作成します。
③singleフォルダー内にprev-next-entry.phpという名前のファイルを作成します。ファイルの中身は空にしたままにします(1文字も書かなくてOKです)。
これで「前の記事へ」「次の記事へ」が表示されなくなるはずです。

返信する
山田

とても簡単な方法ですね。
無事非表示にすることができました。
ご丁寧に回答いただきありがとうございます。

返信する
Kawashima

こんにちは。とても素敵なテーマで気に入ってます。
ひとつだけ教えてください。

投稿や固定ページの下にある「高度な設定」のtittleタグに入力しても
関連記事などには普通の記事タイトルが出てきて反映されないのですが
これはどういう機能なのでしょうか?

返信する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です