【wordpress】2つのカテゴリーのうち同じ方の記事のみランダム表示する【関連記事】

カテゴリー別に関連記事を表示する

以前の同じカテゴリーの記事をランダムで表示するで記事下に関連記事を置くメリットや方法を書きましたが、今回は少しそれの応用です。

大きなカテゴリー分けの片方のみ表示させる

基本は今見ている記事のカテゴリーを取得して、同じカテゴリーから記事を選び出して表示、という形が多いと思いますが、例えば動物関連のサイトで、猫に関する記事と犬に関する記事を多く扱っている時、猫の記事を読んでいる人には猫の方の関連記事、犬の記事を読んでいる人には犬の方の関連記事、という風に大きなカテゴリー分けで表示する記事を分けることが出来ます。

関連記事を表示するコード

基本は以前の同じカテゴリーの記事をランダムで表示するのコードと同じようなコードですが、今回は表示しないカテゴリーがあるので、
まず「if ( in_category( '3' ) ):」でカテゴリーが3の場合と書き、「category__not_in」に表示させたくない方のカテゴリーのID(例の中では2)を入れます。
<?php if ( in_category( '3' ) ): ?>

<div class="relatedted">
<?php
// 同じカテゴリから記事を10件呼び出す
$categories = get_the_category($post->ID);
$category_ID = array();
foreach($categories as $category):
  array_push( $category_ID, $category -> cat_ID);
endforeach ;
$args = array(
  'category__not_in' => array( 2 ), // 
  'posts_per_page'=> 2,
  'orderby' => 'rand', // ランダムに記事を選ぶ
);
$query = new WP_Query($args); ?>
  <?php if( $query -> have_posts() ): ?>
  <?php while ($query -> have_posts()) : $query -> the_post(); ?>
    <div class="related-entry">
      <div class="related-entry-thumb">
  <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
        <?php if ( has_post_thumbnail() ): // サムネイルを持っているとき ?>
        <?php echo get_the_post_thumbnail($post->ID, 'thumb100'); //サムネイルを呼び出す?>
        <?php else: // サムネイルを持っていないとき ?>
        <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.png" alt="NO IMAGE" title="NO IMAGE" width="100px" />
        <?php endif; ?>
        </a>
      </div><!-- /.related-entry-thumb -->
      
      <div class=related-entry-content">
        <h4 class="related-entry-title"> <a href="<?php the_permalink(); ?>">
          <?php the_title(); //記事のタイトル?>
          </a></h4>
        <p class="related-entry-snippet">
      </div><!-- /.related-entry-content -->
    </div><!-- /.new-entry -->
  
  <?php endwhile;?>
  
  <?php else:?>
  <p>記事はありませんでした</p>
  <?php
endif;
wp_reset_postdata();
?>
<br style="clear:both;">
</div>

次にもう片方のカテゴリーだった場合のためにカテゴリーIDを逆にしたコードを入れます。


<?php elseif ( in_category( array( '2' ) ) ): ?>

<div class="relatedted">
<?php
// 同じカテゴリから記事を10件呼び出す
$categories = get_the_category($post->ID);
$category_ID = array();
foreach($categories as $category):
  array_push( $category_ID, $category -> cat_ID);
endforeach ;
$args = array(
  'category__not_in' => array( 3 ), // 
  'posts_per_page'=> 2,
  'orderby' => 'rand', // ランダムに記事を選ぶ
);
$query = new WP_Query($args); ?>
  <?php if( $query -> have_posts() ): ?>
  <?php while ($query -> have_posts()) : $query -> the_post(); ?>
    <div class="related-entry">
      <div class="related-entry-thumb">
  <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
        <?php if ( has_post_thumbnail() ): // サムネイルを持っているとき ?>
        <?php echo get_the_post_thumbnail($post->ID, 'thumb100'); //サムネイルを呼び出す?>
        <?php else: // サムネイルを持っていないとき ?>
        <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.png" alt="NO IMAGE" title="NO IMAGE" width="100px" />
        <?php endif; ?>
        </a>
      </div><!-- /.related-entry-thumb -->
      
      <div class="related-entry-content">
        <h4 class="related-entry-title"> <a href="<?php the_permalink(); ?>">
          <?php the_title(); //記事のタイトル?>
          </a></h4>
        <p class="related-entry-snippet">
      </div><!-- /.related-entry-content -->
    </div><!-- /.new-entry -->
  
  <?php endwhile;?>
  
  <?php else:?>
  <p>記事はありませんでした</p>
  <?php
endif;
wp_reset_postdata();
?>
<br style="clear:both;">
</div>

まとめ

基本は同じカテゴリーから記事が選ばれるので関連記事がきちんと出るはずですが、2つ大きなカテゴリー分けをしている場合は片方を非表示にする方がより関連性の高い記事ばかりが表示されるようになると思います。より欲しい情報が手に入るサイトにしていきたいですね!

コメントを残す

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