Simplicity2の関連記事をランダムではなく新しい順に表示する
Simplicity2は特別な設定なしに関連記事が自動表示される便利なテーマですが、この関連記事の並び順はランダム表示(適当な順)です。それでも問題ありませんが、サイトの用途によっては新しい順に表示したいこともあります。ここでは、Simplicity2の関連記事を新しい順に表示する方法を紹介します。
※Simplicity2バージョン2.7.2で検証しています。
Simplicity2の関連記事の表示順
Simplicity2の関連記事の表示順を制御しているコードを変更しようと思い付くファイルは個別記事のテンプレートのsingle.phpかもしれません。
もちろん間違いではありませんが、Simplicity2の構造は複雑なため、single.phpを開いても関連記事の順番を制御しているコードにたどりつかないかもしれません。
コードを追いかけていくとわかりますがrelated-entries.phpの2行目がヒントです。
<?php //カテゴリ情報から関連記事をランダムに呼び出す $args = get_related_wp_query_args();
このget_related_wp_query_args関数で関連記事の表示順を設定しています。この関数はfunctions.phpの569行目あたりで定義されています。関数内の583行目で「'orderby' => 'rand',」と設定されており、これにより関連記事がランダム順で表示されます。
//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', );
「'orderby' => 'rand',」とは「表示順をランダムに」ということです。この部分を「日付の新しい順に」に書き換えれば完成です。
関連記事の表示順の変更
修正は子テーマが理想ですが、面倒であれば親テーマでも構いません。ただし、テーマのアップデート後は元に戻ってしまうので、同じ作業をする必要があります。
子テーマを使う場合
子テーマで修正する場合、上記のコードをfunctions.phpにコピーペーストして修正しますが、複雑なので注意してコピーする必要があります。568行目のifから601行目のendifまでをコピーして子テーマのfunctions.phpの任意の場所にペーストします。
//WP_Queryの引数を取得 if ( !function_exists( 'get_related_wp_query_args' ) ): function get_related_wp_query_args(){ …略… } endif;
ペーストしたコードの「'orderby' => 'rand',」(2箇所)を次のように修正します。
'orderby' => 'date', 'order' => 'DESC',
2箇所の「orderby」の最初がカテゴリー、2番目がタグによる関連記事の設定です。
編集したコードのイメージは次のようになります。
これにより、関連記事の表示順は投稿日付の新しい順になります。
表示順は他にも設定できます。詳しくは、以下のページも参考にしてください。
【参考】WordPress関数リファレンス/WP Query - 順序づけパラメータ
親テーマを使う場合
親テーマのfunctions.phpを修正する場合、上記と同じように2箇所の「'orderby' => 'rand',」を修正してください。ただし、テーマをアップデートすると元に戻ってしまうため同じ作業が必要です。