今開いている詳細記事が所属するカテゴリと同じカテゴリの記事を、関連記事として表示させたい――。
そんなことを考えたことはありませんか? もしくはすでに実装されているかと思います。
やり方は色々あるかと思いますが、今回はWordpressのタグとPHPを活用した方法をご紹介します。
実際にどのようなタグを使用しているのか、どのようにして必要な引数を取得しているかに
まず最初にスクリプトの全体をご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<section class="sideContent"> <h3>この記事と同じカテゴリの記事のご紹介</h3> <div class="sameCat"> <?php $cats = get_the_category( $post->ID ); ① $catID = array(); //配列の初期化をします。 ② foreach ( $cats as $cat ){ ③ $catID[] = $cat->cat_ID; } //カテゴリのIDとカテゴリの名前を配列で取得します。 $args = array( 'post_type' => 'post', 'post__not_in' => array( $post->ID ), //現在の投稿を除くため、現在の投稿の投稿IDを配列で入れます。 ④ 'post_status' => 'publish', 'category__in' => $catID, //ここではvalueにカテゴリIDの配列を入れます。 ⑤ 'posts_per_page' => 5, 'orderby' => 'rand', ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <time><?php the_time('Y.m.d'); ?></time> <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <?php endwhile; else: echo '<p>同じカテゴリの記事はございません。</p>'; endif; ?> </div> </section> |
これが今回ご紹介するスクリプトのすべてです。
作業の流れは以下の通りです。
現在の投稿のカテゴリを取得します。
↓
カテゴリのIDとカテゴリの名前を配列で取得します。
↓
WP_Queryで同じカテゴリの記事情報を取得します。
↓
必要な情報を呼び出します。
では大事な箇所を、スクリプトにある番号順に見ていきましょう。
- $cats = get_the_category( $post->ID );
現在の記事のカテゴリを取得します。
現在の記事のIDを引数にとるので、引数を「$post->ID」とします。こうすることで対象ページが変わっても自動的に記事IDを取得して引数にとってくれます。
- $catID = array();
ここではこれから取得する配列の初期化をしています。
配列の値を入れる器を用意していると考えると分かりやすいかもしれません。
この形式で取得する配列は連想配列ではなく、「array=(1,2,3);」という通常の配列になります。
この取得できる配列の形式は後々重要になっているので覚えておきましょう。
- foreach ( $cats as $cat )
記事が属するカテゴリは1つとは限りません。複数あった時にも対応できるよう、foreachで取り出しましょう。もちろんカテゴリを一つしか指定できないようにしているケースもあるかと思います。そういったとき、foreach処理は不要です。
$catID[] = $cat->cat_ID;
この2つの値の取り方には特徴がありますね。左辺に[]がついています。
これは先に初期設定した
$catID = array();
これらに右辺の値を入れるために必要なものです。
この記述で配列の値がとれるのです。
ここまででWP_Queryで使用するクエリ文字列形式$argsで使用する値が取得できました。
次は$argsの中身の設定を見ていきます。
- ‘post__not_in’ => array( $post->ID )
ここでは取得したくない投稿のIDを配列で指定します。現在の投稿のみ取得対象から外したいので、array( $post->ID )と記述します。
- ‘category__in’ => $catID,
取得したい情報が属するカテゴリのIDを配列でしています。このとき、渡す配列は連想配列ではなく、「array=(1,2,3);」という形でなければいけません。②でそのように配列の値を取得しましたね。
②で取得した配列、$catIDを値として使用します。
ここから先はよく使用するWP_Queryのパターンになります。
$argsで必要な項目を設定したらWP_Queryで記事情報を取得します。
取得した記事から必要な情報を呼び出します。
今回は同じカテゴリの記事リストなので、日付、パーマリンク、タイトルを呼び出しています。
今回、Wordpressのタグのほか、PHPの配列(array)を活用しました。
このようにWordpressのタグだけではなく、PHPの技術を併用することは、ベースがPHPで成り立っているWordpressでは珍しくありません。
可能な限りPHPについても理解を深めておきたいところです。
特にforeach、配列はセットで多用されます。
クエリ形式文字列$argsでも配列を値にとる引数が多数あります。知らずに整数値で値を設定していたため、もしくは連想配列を値に入れたため、目的の情報が取れてこない、ということはままあることです。
引数の特徴についても理解を深めていきたいものです。
【もっと知識を深めるには】
foreachについてはこちらをご参照ください。
http://php.net/manual/ja/control-structures.foreach.php
配列につていはこちらに詳しい記述があります。
http://php.net/manual/ja/language.types.array.php
クエリ形式文字列に関して(WP_Query)
- 3235 views
- キム