サイト全体の機能
site-specific pluginテーマを変更しても残したい取得条件や機能を置きます。
WP_QUERY RECIPES
「どこに書くか」を決めてから、よく使う取得パターンを最小構成で確認します。
取得方法だけでなく、機能の寿命と影響範囲に合わせて置き場所を選びます。
site-specific pluginテーマを変更しても残したい取得条件や機能を置きます。
page template / template partテンプレート固有の副次的な一覧を組み立てます。
pre_get_postsWordPressが作るmain queryをhookで調整します。
目的に近い例から、置き場所・最小構成・注意点をまとめて確認します。
固定ページの本文とは別に「新着記事」「関連記事」などの小さな一覧を足したいときに使います。画面内へ追加する副次的な一覧なので、新しいWP_Queryを作り、表示後に投稿データを戻します。
$recent = new WP_Query([ 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 3,]); if ($recent->have_posts()) { while ($recent->have_posts()) { $recent->the_post(); get_template_part('template-parts/card'); }} wp_reset_postdata();カテゴリーアーカイブそのものの件数を変えたいときに使います。テンプレート内でmain queryを作り直さず、pre_get_postsで対象画面だけを安全に調整します。
add_action('pre_get_posts', function (WP_Query $query): void { if (is_admin() || ! $query->is_main_query()) { return; } if ($query->is_category()) { $query->set('posts_per_page', 12); }});商品一覧などで「特定カテゴリーかつ価格以内」のように条件を重ねたいときに使います。tax_queryとmeta_queryを分け、数値比較では値の型まで明示します。
$products = new WP_Query([ 'post_type' => 'product', 'tax_query' => [[ 'taxonomy' => 'product_category', 'field' => 'slug', 'terms' => ['featured'], ]], 'meta_query' => [[ 'key' => 'price', 'value' => 5000, 'compare' => '<=', 'type' => 'NUMERIC', ]],]);コードを貼る前に、変更する一覧の種類と影響範囲を切り分けておくと、表示崩れや意図しない取得を防げます。