カテゴリページの投稿一覧の取得条件をカテゴリごとに変える

投稿のカテゴリごとに投稿一覧を取得する条件を変えたいケースありますよね。そういうときにどうするか、というお話です。
たとえば、1ページに表示する件数とか、並び替えの条件とか、並び順など。追加したい条件が複雑でなければ、メインループに条件を追加するだけでできます。
たとえば、デフォルトが1ページ10件表示、並ぶ条件は「日付」の「新しい順」だとして、
カテゴリ「用語集」(スラッグ:yougo)のときだけ、1ページ100件表示、並ぶ条件は“あいうえお”順にしたいので「タイトル」の「昇順」にしたい場合:

テーマの functions.php に以下を追記します。

function add_condition_to_main_loop($query) {
  if ($query->is_main_query() && $query->is_category('yougo')) {
    $query->set('posts_per_page', 100);
    $query->set( 'orderby', 'title');
    $query->set( 'order', 'ASC');
  }
}
add_action('pre_get_posts', 'add_condition_to_main_loop');

上の記述をしておけば「用語集」カテゴリページにおいてのみ取得件数や並ぶ条件が通常と変わります。
特に変わった記述は必要なく、archive.php や category-yougo.php で普通にメインループを回すだけです。

<?php
if (have_posts()) {
  while (have_posts()) {
    the_post();
    //ループ処理
  }
}
  
//ページネーションの処理
global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){
  $paginate_format = '';
  $paginate_base = add_query_arg('paged','%#%');
} else {
  $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') .
  user_trailingslashit('page/%#%/','paged');
  $paginate_base .= '%_%';
}
echo paginate_links(array(
  'base' => $paginate_base,
  'format' => $paginate_format,
  'total' => $wp_query->max_num_pages,
  'mid_size' => 1,
  'current' => ($paged ? $paged : 1),
  'prev_text' => '<',
  'next_text' => '>',
)); ?>