【Simplicity2】関連記事をより関連したものにする方法【カスタマイズ】

以前STINGER7を使用していた時の内容のSimplicity2版です。

【STINGER7】関連記事をより関連したものにする方法【カスタマイズ】
このブログはテーマにSTINGER7を使用しています。 見た目や機能に関してはほぼ満足していますが、関連記事に関しては多少不満があります。 $categories = get_the_cate...

STINGER7は同じカテゴリーからランダムで5つの記事を表示しますが、Simplicity2もほぼ同様で、同じカテゴリーまたは同じタグを持つ記事を表示します。

ここではSimplicity2でより関連した記事を取得する方法を説明します。

ここで説明する内容は直接本番環境で行わないほうが無難です。

一度ローカル環境で確かめた上で反映を行うなどの手順を踏んでください。

スポンサーリンク

割り込めそうなところを探す

STINGER7の時と同様に、割り込めそうなところを探します。

Simplicity2もWP_Queryを使用しているので、「pre_get_posts」をフックすることで対応できそうです。

get_template_partを使用

関連記事は「single.php」から「get_template_part」関数で「related-entries.php」または「related-entries-thumbnail.php」を呼び出すことで表示されています。

「get_template_part(“related-entries”)」の場合は「get_template_part_related-entries」をフックするとrelated-entries.php読み込み前に割り込むことができます。

フックした関数内でpre_get_postsをadd_actionでフックし、さらにその中でremove_actionすることで関連記事のみでpre_get_postsをフックさせることができます。

コードは子テーマのfunctions.phpなどに記述します。

サムネイル付きの方も変更する場合は「get_template_part_related-entries」を同様の方法でフックします。

debug_backtraceを使用

debug_backtraceは関数を呼び出したファイルやクラスなどの情報を取得することができます。

pre_get_postsをフックした関数内でこれを使用することで、「related-entries.php」または「related-entries-thumbnail.php」から呼び出された時のみ、すなわち関連記事のpre_get_postsの場合だけ別の処理を行うことができます。

コードは子テーマのfunctions.phpなどに記述します。

上のどちらの例もSimplicityの設定にかかわらず表示される数が3つになります。

Elasticsearchを使用してみる

Elasticsearchの詳細や導入方法は以下を参照してください。

Elasticsearchは簡単に説明するとあいまい検索や全文検索可能な検索エンジンです。

【Wordpress】Elasticsearchを導入してみた
Elasticsearchって何? Elasticsearchは近年注目を浴びている全文検索エンジンです。 すでにこの分野で先行するApache Solrを超える勢いです。 ...
【WordPress】Fantastic Elasticsearchを導入してみた
前回の記事で「Fantastic ElasticSearch」でkuromojiの使用ができないと紹介しましたが、プラグインの修正をしなくても使用できました。 Fantastic Elast...

基本的にはSTINGER7の時と同様の方法をとります。

検索はタイトルとカテゴリーとタグをつなぎあわせたもので行うようにしました。

まとめ

【WordPress】よく使うフィルタ・アクション【記事編集系・検索系】
プラグインやテーマ開発でよく使うフィルタ・アクションを紹介したいと思います。 記事編集系 the_content 記事の本文をいじるときに使用します。 add_filter('the_...

のページの関連記事は以下のようになりました。

simplicity-elasticsearch

同じシリーズの記事が一番上に、同じ系統の記事がその下に続いているような結果になりました。

Elasticsearchの導入が少しハードルが高いですが、検索の高速化の恩恵も受けられます。

是非トライしてみてください。