【Simplicity】テーマの関連記事表示機能にカスタム投稿タイプを含める方法(自己流)
WordPressでページビュー数を増やすための方法の1つに「関連するコンテンツ」を文末などへ表示するということがありますね。自動で今見ているコンテンツと関連した(似た)情報を表示することで、「こんなコンテンツもある~」と次のページを見てくれたら・・・という機能です。
関連記事を表示する方法としてはYARPPなどのプラグインを使うのが一般的ですが、最近ではテーマの中にこの機能が含まれているものもあります。いつも使わせていただいている「Simplicity」もその1つで、基本機能の中にこの機能が含まれています。
ただどのテーマやプラグインにも共通して言えるのが、カスタム投稿タイプの扱い。これを最初から含む形で関連記事を吐き出す(表示する)プラグインやテーマって実は少ないんですよね。まあカスタム投稿タイプがWordPressにとってはオプション機能なのであまり使う人がいないから仕方ないことなのですが、カスタム投稿を使っている人からしたら何で~~という感覚です。
私はプログラマーでもないので必死にプラグインを探して結局YARPPにカスタム投稿タイプを追加して使用しようかと思ったのですが、せっかくSimplicityに関連記事の機能があり、表示方法もいいし、それを使えばテーマの中で同じようなデザインで表現できるのでコードとにらめっこしながらカスタマイズしてみました。
これでカスタム投稿タイプも含めて関連記事が表示されるようになりましたが、あくまで私的にカスタマイズした方法ですので参考程度に読んでいただければ幸いです。
結局目的の場所に1行追加するだけの内容ですが、自分の備忘録と勉強もかねて細かく書いていますのであしからず。面倒な方はどんどん読み飛ばしてくださいね。
ただし、Simplicityの関連記事表示は「同じカテゴリー」または「同じタグ」を持つコンテンツの中からランダムに呼び出すというものですので、カスタム投稿タイプで作ったコンテンツが通常の投稿と同じカテゴリーを使っている必要があります。
作業する前にテーマのカスタマイザーでカテゴリーベースの関連記事を表示する状態にしてカスタム投稿タイプと通常の投稿で共通のカテゴリーを使っているコンテンツを別タブなどへ表示しておくと作業後の変化がはっきりわかると思います。
関連記事表示の概要
関連記事の抽出を行うプログラムは「related-entries.php」に書かれています。開いてみると、
<?php //カテゴリ情報から関連記事をランダムに呼び出す
$args = get_related_wp_query_args();
$query = new WP_Query( $args ); ?>
・・・・・以下省略・・・・
【注意】コードをコピーして使用する前に必ずお読みください
この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。
使用については自己責任でお願いします
コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。
万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません
コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります
コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります
その場合には以下の方法で修正を行ってみてください
- コードの中に全角の記号が入っていませんか? 半角にすることで解消できます
- コードの中に全角の空白(スペース)がありませんか? 半角にすることで解決できます
- コードは合っているはずなのに更新できないときは 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、WordPressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
- 「何かが間違っています...」と表示され、更新できないときは このエラーは本当に何がエラーなのかをWordPressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
コードを転載する場合には
ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします
という記述があり、
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;
【注意】コードをコピーして使用する前に必ずお読みください
この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。
使用については自己責任でお願いします
コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。
万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません
コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります
コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります
その場合には以下の方法で修正を行ってみてください
- コードの中に全角の記号が入っていませんか? 半角にすることで解消できます
- コードの中に全角の空白(スペース)がありませんか? 半角にすることで解決できます
- コードは合っているはずなのに更新できないときは 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、WordPressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
- 「何かが間違っています...」と表示され、更新できないときは このエラーは本当に何がエラーなのかをWordPressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
コードを転載する場合には
ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします
というのが中央から下あたりにあります。simplicityはすべてにおいてきちんとコメントがされている(何が書かれているかが日本語でタイトル付けしてある)ので分かりやすくて本当に便利ですね。
これを編集する訳ですが、functions.phpはWordPressを動かす上でとても重要なファイルなので変更する前に必ずバックアップを取りましょう。Whatバックアップ?という方は
を参考に行ってくださいね。
子テーマを使っている場合は子テーマで編集
そのまま親テーマのfunctions.phpで編集してもいいのですが、せっかく子テーマが配布されているので子テーマ内で編集しましょう。
- 子テーマのfunctions.phpのバックアップを取る
- 上のコードをそのまま子テーマのfunctions.phpへコピー
- 次に紹介するコードを適正箇所に挿入
- 「更新」
この手順で更新が完了すれば、カスタム投稿タイプが適用された関連記事が表示されます。
ただし、Simplicityの関連記事表示は「同じカテゴリー」または「同じタグ」を持つコンテンツの中からランダムに呼び出すというものですので、カスタム投稿タイプで作ったコンテンツが通常の投稿と同じカテゴリーを使っている必要があります。
では、コードと挿入する部分について、上のコードの中に
return $args = array(
'post__not_in' => array($post -> ID),
'posts_per_page'=> intval(get_related_entry_count()),
'category__in' => $category_IDs,
'orderby' => 'rand',
【注意】コードをコピーして使用する前に必ずお読みください
この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。
使用については自己責任でお願いします
コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。
万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません
コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります
コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります
その場合には以下の方法で修正を行ってみてください
- コードの中に全角の記号が入っていませんか? 半角にすることで解消できます
- コードの中に全角の空白(スペース)がありませんか? 半角にすることで解決できます
- コードは合っているはずなのに更新できないときは 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、WordPressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
- 「何かが間違っています...」と表示され、更新できないときは このエラーは本当に何がエラーなのかをWordPressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
コードを転載する場合には
ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします
という記述があり、これが関連記事を引っ張り出すための条件なので、ここへ以下のコードを追加します。コードは上半分がカテゴリーベースと下半分がタグベースになっています(テーマカスタマイザーでどちらを選ぶかという選択肢があります)ので同じ場所へ挿入しましょう。
可能な限りすべての投稿タイプを含める
'post_type' => array('any'),
を追加すると、カスタム投稿タイプのオプションの中で
「”exclude_from_search” => false,」
(検索から除外しない)になっている投稿タイプがすべて含まれます
投稿タイプを指定して含める
'post_type' => array('post','カスタム投稿タイプ名'),
を追加すると、「カスタム投稿タイプ名」に指定したすべての投稿タイプが対象になります。複数ある場合は「,'カスタム投稿タイプ名'」を追加していけばOKです。
代表的なのはこの2つですが、指定の仕方はいろいろあって
に詳しく書かれています。
挿入するのは「'orderby' => 'rand',」の下です。
さらに関連記事の精度を上げる方法
Simplicityの作者様サイトで掲載されていた内容の実践記録です。
WordPressのカスタマイズ・不具合対応などご相談ください
Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。
【スポンサーリンク】
- タグ:
- WordPress