Simplicity2の関連記事をランダムではなく新しい順に表示する

WordPress個別サポート

Simplicity2は特別な設定なしに関連記事が自動表示される便利なテーマですが、この関連記事の並び順はランダム表示(適当な順)です。それでも問題ありませんが、サイトの用途によっては新しい順に表示したいこともあります。ここでは、Simplicity2の関連記事を新しい順に表示する方法を紹介します。

Simplicity2の関連記事はランダム順に表示される
Simplicity2の関連記事はランダム順に表示される

※Simplicity2バージョン2.7.2で検証しています。

Simplicity2の関連記事の表示順

Simplicity2の関連記事の表示順を制御しているコードを変更しようと思い付くファイルは個別記事のテンプレートのsingle.phpかもしれません。

もちろん間違いではありませんが、Simplicity2の構造は複雑なため、single.phpを開いても関連記事の順番を制御しているコードにたどりつかないかもしれません。

コードを追いかけていくとわかりますがrelated-entries.phpの2行目がヒントです。

この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',」を修正してください。ただし、テーマをアップデートすると元に戻ってしまうため同じ作業が必要です。