すぐ忘れるので備忘録。
基本形
functions.phpに記述。
function my_pre_get_posts($query)
{
// 管理画面とメインクエリに干渉しないようにする
if (is_admin() || !$query->is_main_query()) {
return;
}
// 処理
if ($query->is_front_page()) {
$query->set('orderby', 'title');
$query->set('order', 'ASC');
}
}
add_action('pre_get_posts', 'my_pre_get_posts');
処理に使う条件いろいろ
<?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 = [
[
'taxonomy' => 'tax-slug',
'field' => 'slug',
'terms' => ['term-slug']
];
];
$query->set('tax_query', $tax_query);
// カスタムフィールド
$meta_query = [
'key' => 'field_key',
'value' => 'value',
'compare' => '!=' // = != < <= > >=
];
$query->set('meta_query', $meta_query);