こんにちは!WordPressのテンプレート改造についてのメモです。
このブログでも使用している、関連記事を表示する機能の追加方法です。
プラグインは使用いたしません!カスタマイズもバッチリです!
関連記事の判定は、「記事に同じタグが使われている事」を条件に行います。
仕組み
ごくシンプルです!
1.記事を表示する
2.表示した記事にくっついているタグを集める
3.集めたタグが付与されている記事を表示する
作業内容
WordPressテーマのうち、“single.php”に若干の追加と、
こちらで紹介する“part-tag-relatedpost.php”をテーマフォルダに追加し、中身を必要に応じてカスタマイズしてください。
まずは“single.php”のなかの、関連記事を追加したい位置に記述を追加します。
the_post(); で記事情報を取得している箇所より後に記述するようにして下さい。
(厳密には get_the_ID(); などの取得が可能な位置です。)
<?php $post_id = get_the_ID(); //記事の投稿IDを取得 $tags = get_the_tags(); //この記事が含むタグをゲット echo get_template_part('part-tag-relatedpost'); //関連記事呼び出しテンプレート ?>ここでは記事のIDをタグ配列を取得した上で、テンプレートパーツを呼び出す処理をします。
どちらも関連記事の取得および表示に必要な情報です。
そして、呼び出すテンプレートパーツ本体がこちらです。
まずは全文コピペして動作を確認してみて下さい!
ファイル名は“part-tag-relatedpost.php”として下さい。
テーマフォルダにアップロードするのも忘れずに!
<?php global $post_id; //グローバル変数より投稿IDをゲット global $tags; //グローバル変数よりタグ情報をゲット $relatedpost_count = 0; //関連記事を出力した数(カウンタ) $relatedpost_max = 3; //関連記事を出力する最大数 $related_taglist = []; //関連記事を出力する為のタグリスト //記事からタグを集める foreach( $tags as $tag ): //記事に含まれるタグの数だけ繰り返し $related_taglist[] = $tag -> term_id; //タグIDをリスト配列に追加 endforeach; $args = array( //出力用セッティング 'post__not_in'=> array( $post_id ), //おおもとの記事は除外する 'tag__in' => $related_taglist, //タグ配列に含まれるタグに含まれる記事を取得 ); query_posts( $args ); //設定より記事取得 while ( have_posts() ) : //一致する記事が見つかった場合繰り返す the_post(); ?> <?php if( !$relatedpost_count ): /* 最初の記事の場合、ヘッダを付与 */ ?>処理のながれに関しては、コメントに書いてある通りです。 <?php endif; wp_reset_query(); //元のクエリを復帰 ?>
デフォルトでは、以下のような構造で出力されます。
掲載日時やサムネイル表示などもループ内でテンプレートタグから呼び出せば可能です。必要に応じて、カスタマイズしてみて下さい!