WordPressのホームページで更新日時順に投稿を表示させる方法です。
pre_get_posts を使う
アクションフック pre_get_posts を使ってメインクエリを変更します。(詳しい説明はCodexで。プラグイン API/アクションフック一覧/pre_get_posts)
functions.php
function sort_by_modified( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'orderby', 'modified' );
}
}
add_action( 'pre_get_posts', 'sort_by_modified' );
クエリを変更する関数を作って、pre_get_postsで呼び出します。
関数内の条件分岐により、特定のページでのみ実行します。今回はホームページだけなので is_home() を使用。
ちなみに、ここでは is_front_page() は使えないらしいです。
pre_get_posts は WP_Query がセットアップされるより前に実行されます。WP_Query に依存するいくつかのテンプレートタグや条件分岐関数は動作しません。例えば、is_front_page() は動作しませんが、is_home() は動作します。
プラグイン API/アクションフック一覧/pre get posts – WordPress Codex 日本語版
orderby => ‘modified’ にして更新順に並び替えます。
テンプレートファイルも適宜調整する
投稿リストに作成日時と更新日時が両方表示される場合は問題ありませんが、作成日時のみ表示される場合には、そこのところを更新日時に変更しておかないと不自然ですよね。
該当するテンプレートファイルの the_time() となっている部分を the_modified_time() に書き換えます。 一度も更新していない場合は作成日時になりますので、これでOK。
コメント