WordPressでページビュー数を増やすための方法の1つに「関連するコンテンツ」を文末などへ表示するということがありますね。自動で今見ているコンテンツと関連した(似た)情報を表示することで、「こんなコンテンツもある~」と次のページを見てくれたら・・・という機能です。
関連記事を表示する方法としてはYARPPなどのプラグインを使うのが一般的ですが、最近ではテーマの中にこの機能が含まれているものもあります。いつも使わせていただいている「Simplicity2」もその1つで、基本機能の中にこの機能が含まれています。
ただどのテーマやプラグインにも共通して言えるのが、カスタム投稿タイプの扱い。これを最初から含む形で関連記事を吐き出す(表示する)プラグインやテーマって実は少ないんですよね。まあカスタム投稿タイプがWordPressにとってはオプション機能なのであまり使う人がいないから仕方ないことなのですが、カスタム投稿を使っている人からしたら何で~~という感覚です。
私はプログラマーでもないので必死にプラグインを探して結局YARPPにカスタム投稿タイプを追加して使用しようかと思ったのですが、せっかくSimplicity2に関連記事の機能があり、表示方法もいいし、それを使えばテーマの中で同じようなデザインで表現できるのでコードとにらめっこしながらカスタマイズしてみました。
これでカスタム投稿タイプも含めて関連記事が表示されるようになりましたが、あくまで私的にカスタマイズした方法ですので参考程度に読んでいただければ幸いです。
結局目的の場所に1行追加するだけの内容ですが、自分の備忘録と勉強もかねて細かく書いていますのであしからず。面倒な方はどんどん読み飛ばしてくださいね。
ただし、Simplicity2の関連記事表示は「同じカテゴリー」または「同じタグ」を持つコンテンツの中からランダムに呼び出すというものですので、カスタム投稿タイプで作ったコンテンツが通常の投稿と同じカテゴリーを使っている必要があります。
作業する前にテーマのカスタマイザーでカテゴリーベースの関連記事を表示する状態にしてカスタム投稿タイプと通常の投稿で共通のカテゴリーを使っているコンテンツを別タブなどへ表示しておくと作業後の変化がはっきりわかると思います。
関連記事表示の概要
関連記事の抽出を行うプログラムは「related-entries.php」に書かれています。開いてみると、
<?php //カテゴリ情報から関連記事をランダムに呼び出す
$args = get_related_wp_query_args();
$query = new WP_Query( $args ); ?>
・・・・・以下省略・・・・
という記述があり、
WP_Query( $args );で記事を抽出するための変数($args)がget_related_wp_query_args()という記述で書かれているとなっています
このget_related_wp_query_args()はテーマのfunctions.php内にありますからfunctions.phpを開いて記述を探すと
//WP_Queryの引数を取得
if ( !function_exists( 'get_related_wp_query_args' ) ):
function get_related_wp_query_args(){
global $post;
if ( is_related_entry_association_category() ) {
//カテゴリ情報から関連記事をランダムに呼び出す
$categories = get_the_category($post->ID);
$category_IDs = array();
foreach($categories as $category):
array_push( $category_IDs, $category -> cat_ID);
endforeach ;
if ( empty($category_IDs) ) return;
return $args = array(
'post__not_in' => array($post -> ID),
'posts_per_page'=> intval(get_related_entry_count()),
'category__in' => $category_IDs,
'orderby' => 'rand',
);
} else {
//タグ情報から関連記事をランダムに呼び出す
$tags = wp_get_post_tags($post->ID);
$tag_IDs = array();
foreach($tags as $tag):
array_push( $tag_IDs, $tag -> term_id);
endforeach ;
if ( empty($tag_IDs) ) return;
return $args = array(
'post__not_in' => array($post -> ID),
'posts_per_page'=> intval(get_related_entry_count()),
'tag__in' => $tag_IDs,
'orderby' => 'rand',
);
}
}
endif;
というのが中央から下あたりにあります。Simplicity2はすべてにおいてきちんとコメントがされている(何が書かれているかが日本語でタイトル付けしてある)ので分かりやすくて本当に便利ですね。
これを編集する訳ですが、functions.phpはWordPressを動かす上でとても重要なファイルなので変更する前に必ずバックアップを取りましょう。Whatバックアップ?という方は
【WordPress】テーマの「functions.phpのバックアップ」って何ぞや??安全にfunctions.phpの記述を変更・追加する方法
を参考に行ってくださいね。
子テーマを使っている場合は子テーマで編集
そのまま親テーマのfunctions.phpで編集してもいいのですが、せっかく子テーマが配布されているので子テーマ内で編集しましょう。
- 子テーマのfunctions.phpのバックアップを取る
- 上のコードをそのまま子テーマのfunctions.phpへコピー
- 次に紹介するコードを適正箇所に挿入
- 「更新」
この手順で更新が完了すれば、カスタム投稿タイプが適用された関連記事が表示されます。
ただし、Simplicity2の関連記事表示は「同じカテゴリー」または「同じタグ」を持つコンテンツの中からランダムに呼び出すというものですので、カスタム投稿タイプで作ったコンテンツが通常の投稿と同じカテゴリーを使っている必要があります。
では、コードと挿入する部分について、上のコードの中に
return $args = array(
'post__not_in' => array($post -> ID),
'posts_per_page'=> intval(get_related_entry_count()),
'category__in' => $category_IDs,
'orderby' => 'rand',
という記述があり、これが関連記事を引っ張り出すための条件なので、ここへ以下のコードを追加します。コードは上半分がカテゴリーベースと下半分がタグベースになっています(テーマカスタマイザーでどちらを選ぶかという選択肢があります)ので同じ場所へ挿入しましょう。
可能な限りすべての投稿タイプを含める
‘post_type’ => array(‘any’),
を追加すると、カスタム投稿タイプのオプションの中で
「”exclude_from_search” => false,」
(検索から除外しない)になっている投稿タイプがすべて含まれます
投稿タイプを指定して含める
‘post_type’ => array(‘post’,’カスタム投稿タイプ名’),
を追加すると、「カスタム投稿タイプ名」に指定したすべての投稿タイプが対象になります。複数ある場合は「,’カスタム投稿タイプ名’」を追加していけばOKです。
代表的なのはこの2つですが、指定の仕方はいろいろあってこちらにに詳しく書かれています。
挿入するのは「’orderby’ => ‘rand’,」の下です。
さらに関連記事の精度を上げる方法
【Simplicity2】テーマの関連記事表示機能のカスタマイズ(関連性の精度を上げる)
Simplicity2の作者様サイトで掲載されていた内容の実践記録です。