すぐ忘れるので備忘録。

基本形

functions.phpに記述。


<?php
add_action('pre_get_posts',function ($query) {

   // 管理画面とメインクエリに干渉しないようにする
  if (is_admin() || !$query->is_main_query()) {
    return;
  }

  // なんかしらの処理
  if ($query->is_post_type_archive('custom-posttype')) {
    $query->set('orderby', 'title');
    $query->set('order', 'ASC');
  }
});

処理に使う条件いろいろ


<?php
$query->is_home()
$query->is_single()
$query->is_singular($post_types) // 引数は投稿タイプのスラッグまたは配列
$query->is_page()
$query->is_archive()
$query->is_category()
$query->is_category(array(3,'slug-name','カテゴリ名')) // カテゴリを複数指定。ID, スラッグ, ラベルが使える
$query->is_tag()
$query->is_tax() // 全てのタクソノミーページ
$query->is_tax('slug-name') // タクソノミーのスラッグを指定
$query->is_tax('tax-slug', array('term-slug-1','term-slug-2')) // タクソノミー 'tax-slug' のアーカイブページが表示されており、そのタクソノミーのタームが 'term-slug-1'または'term-slug-2' である場合。
$query->is_search()
$query->is_post_type_archive('post_type') // カスタム投稿タイプのスラッグを指定
$query->is_date()
$query->is_year()
$query->is_month()
$query->is_author()
$query->is_feed()
$query->is_404()

処理の設定


<?php
$query->set('posts_per_page', 20);
$query->set('cat','3'); // カテゴリID3の記事を取得
$query->set('cat','-3'); // カテゴリID3の記事を除外
$query->set('category_name', 'cat-slug') // カテゴリをスラッグで取得
$query->set('category__not_in', array('cat-slug-1', 'cat-slug-2'); // カテゴリを除外
$query->set('post_type','post'); // 投稿タイプを限定

$tax_query = array(
 array(
   'taxonomy' => 'tax-slug',
   'field' => 'slug',
   'terms' => array('term-slug')
 );
);
$query->set('tax_query' , $tax_query);