記事を追加更新するが表示の順番はタイトル順を保持したい。
でもお知らせや日記は日付順じゃないとおかしいので現状維持したい。
という仕様変更を別サイトですが適用してみましたので、その方法をメモしておきます。
テーマの更新で影響を受けない子テーマの function.php に対してコードを追加します。
function sort_category_by_title($query) {
if (!is_admin() && $query->is_main_query() && $query->is_category()) {
// 特定のカテゴリスラッグ(または複数)を投稿順(デフォルト)にしたい場合
$category_name = get_queried_object()->slug;
// 投稿順にしたいカテゴリ(スラッグ)を配列で指定
$exclude = array('news', 'blog'); // ←投稿順にしたいカテゴリのスラッグ
if (!in_array($category_name, $exclude)) {
// それ以外はタイトル順
$query->set('orderby', 'title');
$query->set('order', 'ASC');
}
}
}
add_action('pre_get_posts', 'sort_category_by_title');
追加場所はどこでもいいけど、まぁ一番下で良いでしょう。
$exclude = array('news', 'blog'); // ←投稿順にしたいカテゴリのスラッグ
news,blogは仮のスラッグです。
自サイトのソートの影響を受けないようにしたいスラッグに書き換えます。
array型なので減らしても追加してもOKです。
注意点としては、スラッグが日本語(全角)の場合に上手く機能しなかったので、
半角文字に使った方がよさそうです。
コメント