関連した記事リストを表示してページセッション数を上げる
プログラムでやる事
個別の記事ページに、特定のタグが設定された記事リストを表示します。表示する場所は、コメントフォームの下に記事リストを追加します。
タスクリストとしては、
- タグの取得
- 引数の設定
- WP_Queryの実行
- ループ処理内でHTMLの生成
- フィルターフックに関連付け
WordPressのタグを使って、類似する記事をまとめておくことで、ページを閲覧したユーザーに少しでも多くの記事を見てもらうことができるようになります。また、タグ名がh3タグで設定されるようにしてみます。
タグの取得
各記事に設定されたタグを取得するコードは以下の通りです。
$t = get_the_tags(get_the_ID());
$tにはオブジェクト配列が返されるので、foreachでデータを整えます。
引数の設定
foreachを利用して、WP_Queryで設定する引数を$argsとして作成し、タグ名を格納する専用の変数も用意します。
foreach($t as $tag) { $args['tag'] = $tag->slug; $args['showposts'] = $tag->count; $name = $tag->name; break; }
showpostsとして取得したい記事の数を指定することが可能です。この引数を指定しないと記事が1件しか取得できないので注意が必要です。
$name変数にはタグ名を設定しておき、h3タグ内で使います。
WP_Queryの実行
foreachを使って$args配列を生成したので、WP_Queryの引数としてそのまま指定します。
$query = new WP_Query($args);
ループ処理内でHTMLの生成
必要なデータが揃いましたので、記事リストを構成するHTMLを生成します。冒頭でh3にタグ名を設定しています。
if ( $query->have_posts() ) { echo '<h3>'.$name.'</h3>'; echo '<ul>'; while ( $query->have_posts() ) { $query->the_post(); echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } echo '</ul>'; } else { }
生成されるHTMLは、通常のUnordered List(ul li)です。記事ページの下部にまとまった数の関連記事を配置しておくことでSEO対策が出来ます。
フィルターフックに関連付け
コメントフォーム下に記事リストを配置するに、
comment_formフィルターフック
を利用します。
使い方の詳細は、上のページで記事にしてあります。
add_filter('comment_form', 'comment_form_insert_post');
コード全体
記事にタグを設定してあれば、以下のコードをfunctions.phpの最後に追加することで、記事リストをコメントフォーム下に表示することが出来ます。
function comment_form_insert_post(){ if( is_single() ) { // タグの取得 $t = get_the_tags(get_the_ID()); if($t) { // 引数の設定 foreach($t as $tag) { $args['tag'] = $tag->slug; $args['showposts'] = $tag->count; $name = $tag->name; break; } // データベースからデータを取得 $query = new WP_Query($args); // HTMLの生成 if ( $query->have_posts() ) { echo '<h3>'.$name.'</h3>'; echo '<ul>'; while ( $query->have_posts() ) { $query->the_post(); echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } echo '</ul>'; } else { } wp_reset_postdata(); } } } add_filter('comment_form', 'comment_form_insert_post');