【WordPress】プラグイン不要!記事ページ下部に「同じタームの記事」を数件表示する!

20210621 Wordpress
Wordpress

やることはおおまかに言うと2つだけ!

「関連記事」とかECサイトであれば「関連するアイテム」などというように、記事または商品の詳細ページにて、何かしらのコンバージョンまで離脱をさせないように横軸での回遊を促すコンテンツは有効です。処理としては以下の2つです。

  1. 現在表示している記事の特定のタームを拾う
  2. 同じタームを持つ記事を表示

次のコードは、タクソノミー “product-categories” で投稿タイプ “products” を取得する想定の際の表示方法です。必要に応じてその2つを変更してください!

<?php // 現在表示されている投稿と同じタームに分類された投稿を取得
  $taxonomy_slug = 'product-categories'; // タクソノミーのスラッグを指定
  $post_type_slug = 'products'; // 投稿タイプのスラッグを指定
  $post_terms = wp_get_object_terms($post->ID, $taxonomy_slug); // タクソノミーの指定
  if( $post_terms && !is_wp_error($post_terms)) { // 値があるときに作動
    $terms_slug = array(); // 配列のセット
    foreach( $post_terms as $value ){ // 配列の作成
      $terms_slug[] = $value->slug; // タームのスラッグを配列に追加
    }
  }
  $args = array(
    'post_type' => $post_type_slug, // 投稿タイプを指定
    'posts_per_page' => 5, // 表示件数を指定
    'orderby' =>  'rand', // ランダムに投稿を取得
    'post__not_in' => array($post->ID), // 現在の投稿を除外
    'tax_query' => array( // タクソノミーパラメーターを使用
      array(
        'taxonomy' => $taxonomy_slug, // タームを取得タクソノミーを指定
        'field' => 'slug', // スラッグに一致するタームを返す
        'terms' => $terms_slug // タームの配列を指定
      )
    )
  );
  $the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

役に立つかはわかりませんが、実際の設置例

不動産情報サイトで使用するものと仮定して、「同じエリアの物件」を指定した件数分、ランダムに表示するコードを作成したので紹介します。

  1. 現在表示している記事の特定のタームを拾う → ここではカスタムタクソノミーで紐づけたタグの「エリア情報」を拾う(「渋谷区」とか)
  2. 同じタームを持つ記事を表示 → ここでは同じエリアのタグがついた記事(「渋谷区」の物件を表示)。その際に味付けで、ランダムとか〇件まで表示、とか調整。
<?php // 現在表示されている投稿と同じタームに分類された投稿を取得する
  $taxonomy_slug = 'rent_room_area'; // タクソノミーのスラッグを指定(ここでは'rent_room_area')
  $post_type_slug = 'rent_room'; // 投稿タイプのスラッグを指定(ここでは'rent_room')
  $post_terms = wp_get_object_terms($post->ID, $taxonomy_slug); // タクソノミーの指定
  if( $post_terms && !is_wp_error($post_terms)) { // 値があるときに作動
    $terms_slug = array(); // 配列のセット
    foreach( $post_terms as $value ){ // 配列の作成
      $terms_slug[] = $value->slug; // タームのスラッグを配列に追加
    }
  }
  $args = array(
    'post_type' => $post_type_slug, // 投稿タイプを指定
    'posts_per_page' => 5, // 表示件数を指定(5件に指定)
    'orderby' =>  'rand', // ランダムに投稿を取得
    'post__not_in' => array($post->ID), // 現在の投稿を除外
    'tax_query' => array( // タクソノミーパラメーターを使用
      array(
        'taxonomy' => $taxonomy_slug, // タームを取得タクソノミーを指定
        'field' => 'slug', // スラッグに一致するタームを返す
        'terms' => $terms_slug // タームの配列を指定
      )
    )
  );
  $the_query = new WP_Query($args); if($the_query->have_posts()):
?>

<!-- 同じエリアの物件表示部分START -->
<div class="popular_area_content">
	<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
	<!-- ループはじめ -->
	<a href="<?php the_permalink() ?>">
		<div>
			<div>
				<?php $rentroom_photo=get_field('rentroom_photos',$post->ID);
				//var_dump($rentroom_photo); //を外せば、$rentroom_photoが何の値を持っているのか出力できる(動作確認用)

			    ?>
			    <!--繰り返しフィールドの画像を表示-->
			  	<?php $i = 0;
			  		while( have_rows( 'rentroom_photos' ) ): the_row(); $i++; ?>
			        <?php
			          if( $i > 1 ) {
				        break;
				      }
			          $img = get_sub_field( 'rentroom_photo' );
			          //var_dump($img['ID']); //を外せば、$img['ID']が何の値を持っているのか出力できる(動作確認用)
			        ?>
			        <?php echo wp_get_attachment_image($img['ID'],array(250, 250))
			        	//wp_get_attachment_image()関数を使い、不揃いな画像でも縦横比を維持したまま横幅が250pxになるようにリサイズ・トリミングして出力
			        ; ?>
			  	<?php endwhile; ?>
	  		</div>

			<div class="top_content_rent_room_exp">
				<h3><?php the_title(); ?></h3>
				<p><?php echo get_favorites_button(); ?></p>
			</div>
		</div>
	</a>
	<!-- ループおわり -->
	<?php endwhile; ?>
	<?php wp_reset_postdata(); ?>
	<?php endif; ?>
</div>

物件の登録では、建物の外観や室内の写真が複数登録ができる必要があるため、繰り返しフィールドでいくつでも登録できるようにするとよいです。

そこで、コード内<!–繰り返しフィールドの画像を表示–>で囲まれている処理をして、画像を表示しています。

ここでは、登録された写真のはじめの1枚しか表示しないように書いたので、もっとシンプルにも書けるかもです。

if( $i > 1 ) {
   break;
}

で、ループの中で”1を超えた”場合、ループを終了(break)するようにしていますので、

この”1″を変更すれば、はじめの〇枚が表示されるようにできます。

実際の例では、

記事登録に「アイキャッチ画像」を使用しないものとしていますので、ACF(Advanced Cutom Field)の「繰り返しフィールド」で、

画像を任意の数だけ登録できる仕様を考えて、そうした際の画像の表示方法をループの中で行う必要があることと、

wp_get_attachment_image()関数を使って、リスト上に表示された際に画像がそれぞれ不揃いな縦横比で登録されていても、

すべて同じサイズで出力されるように処理を加えています。

このような関連記事のリスト表示+複数画像を登録して、出力する枚数を調整するような処理は、フリマサイトなどにも応用できるかと思います!

今日聴いていた曲というかプレイリスト

Webサイト制作を依頼したい方へ

PRYTHM WORKS(プリズムワークス)は、東京都墨田区、東京スカイツリーのふもとにあるWebコンテンツ制作事務所です。

華々しいおしゃれなECサイトをはじめ、アンダーグラウンドな案件まで幅広くご依頼をいただき、どんな案件でも真心・丁寧・楽しくを理念に掲げて制作しております!

作りたいサービスはあるけど、まずは費用感が知りたい!という方も、まずはお問い合わせください!

mail@prytymworks.tokyo

PRYTHM WORKSが手掛ける仕事の一部をご紹介します。

制作のご依頼者様用 費用かんたんお見積もりフォーム

おそらく本記事を読まれるのは、制作の現場の、法人またはフリーの、プロデューサーの方、ディレクターの方、エンジニアの方がほとんどかと存じます。
いつもおつかれさまです!そして本記事をお読みいただきありがとうございます。
紹介した記事の内容について、またはその他制作のご依頼について、以下のフォームより簡易お見積もりができます!
試算だけならフォーム送信しなくてもできますので、ぜひ試しにいかがでしょう?

お仕事をご希望の制作者様用 お問合せフォーム

また、まずはライトなご相談から…ということであれば、こちらのコンタクトフォームからお気軽にどうぞ!ご縁を大切にしてご返信いたします!

    タイトルとURLをコピーしました