本文へ移動

WP_Query解説

記事のタイトルだけを検索する方法
|WP_Queryのsearch_columns

WP_Queryのsで検索すると、タイトルにキーワードがない記事まで出ることがあります。標準ではタイトル・抜粋・本文が検索対象です。search_columnsでタイトルだけなどに絞る方法と、検索漏れやカスタムフィールド検索との違いを確認します。

Huddly Huddly 投稿日: 2026年10月3日 読了目安: 5分

タイトルだけ検索する時はsearch_columnsをsと組み合わせる

search_columnsは、検索キーワードsの対象をpost_title、post_excerpt、post_contentから選ぶWP_Queryの引数です。WordPress 6.2で導入され、検索を行うにはsも必要です。

タイトルだけなら’search_columns’ => [ ‘post_title’ ]とします。カスタムフィールドは対象にできません。この記事では指定例、検索漏れ、互換性、0件時の確認順を解説します。

なぜタイトルにない記事まで検索結果へ出るのか

sは検索キーワードを指定する引数です。初期状態ではタイトル、抜粋、本文が検索対象になるため、キーワードがタイトルになくても、抜粋や本文に含まれていれば検索結果へ出ます。

検索する場所を制御するのがsearch_columnsです。指定できるのは、タイトルを表すpost_title、抜粋を表すpost_excerpt、本文を表すpost_contentの3つです。

指定値検索する場所使いどころ
post_title記事のタイトルタイトルだけでヒットさせたいとき
post_excerpt記事の抜粋一覧用の短い説明文も検索したいとき
post_content記事の本文本文まで含めて広く検索したいとき

ここでいう抜粋は、データベースのpost_excerptへ保存された文です。 抜粋欄が空の時にthe_excerpt()が本文から抜き出して表示する短文は、post_excerptだけの検索では探せません。SEOプラグインの説明文も、別のメタキーへ保存されていれば対象外です。

タイトル検索だけにしたい、本文に偶然出てくる語句を除きたい時に対象を狭めます。

search_columnsの基本的な使い方

search_columnsはsと組み合わせます。次はWordPressをタイトルだけから探す独自一覧です。クラシック子テーマのtemplate-parts/search-title-list.phpへ保存し、表示したいテンプレートのメインループ内でthe_post()の後にget_template_part( ‘template-parts/search-title-list’ );を呼びます。投稿本文やfunctions.phpの直下へ貼るコードではありません。

この例は結果を比較しやすくするため、公開済みの通常投稿3件をpost__inで選びます。最初にWordPress、後半で本文だけにあるWP_Queryを検索します。ID15・26・53は自分の投稿IDへ置き換え、対象を通常投稿全体へ広げる時はpost__inの行を外します。空配列を渡して「対象0件」を表す指定ではありません。

比較用の投稿タイトル保存済み抜粋本文
ID53:はじめてのWordPress設定WordPressを含むWordPressを含むWordPressを含む
ID26:関連記事:キャッシュの使い方WordPressを含まないWordPressを含むWordPressを含まない
ID15:一覧取得を確認するメモどちらの語も含まないどちらの語も含まないWP_Queryを含む

現在のWP Query Builderでは、詳細設定で「post / publish / 5」、検索語に「WordPress」、Search Columnsに「タイトル(post_title)」、post__inに「53,26,15」、orderbyに「post__in」、ignore_sticky_postsにtrueを入力しました。自動高速化はオフです。次の$argsは、その実画面で生成された内容を変更せずに使っています。

クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。

PHPtemplate-parts/search-title-list.php比較用の3投稿からWordPressをタイトルだけで探して表示する
<?php$args = array(    'post_type' => 'post',    'post_status' => 'publish',    'posts_per_page' => 5,    's' => 'WordPress',    'search_columns' => array(        'post_title'    ),    'orderby' => 'post__in',    'post__in' => array(    53,    26,    15),    'ignore_sticky_posts' => true); $query = new WP_Query( $args ); if ( $query->have_posts() ) {   echo '<ul>';    while ( $query->have_posts() ) {      $query->the_post();       printf(         '<li><a href="%s">%s</a>(ID: %d)</li>',         esc_url( get_permalink() ),         esc_html( get_the_title() ),         get_the_ID()      );   }    echo '</ul>';} else {   echo '<p>一致する投稿はありませんでした。</p>';} wp_reset_postdata();

Builderが生成したのは$argsまでです。その後のnew WP_Query()、リンクと投稿IDの表示、0件時の文言、wp_reset_postdata()は、結果を確かめるために手動で追加しています。

sに語句、search_columnsに探す場所を入れます。the_post()を使った後は、通常の別ループと同じくwp_reset_postdata()で投稿データを戻します。

この例は検索対象の違いを見るため、post__inへ比較用の3投稿を53・26・15の順で入れ、orderby => ‘post__in’でその順番を保ちます。関連度による順位の違いは混ぜていません。先頭固定の特別扱いも外しています。確認用として追加した場合は、終了後に呼び出しとファイルを撤去してください。

タイトルだけならID53の1件になる

検索語WordPressがタイトルにあるのはID53です。ID26の保存済み抜粋にも同じ語がありますが、タイトルだけを対象にしているので表示されません。
WordPressのタイトル検索で、はじめてのWordPress設定の1件だけが表示されるサイト
タイトルのみタイトルに語があるID53だけを表示

sはWordPress、search_columnsはpost_title。比較用の3投稿からID53の1件を取得します。

検索対象を変更する前後で、代表的な検索語の結果を比べます。本番と分けてサーバー上でも試したい場合は、XserverのPHP対応やバックアップ条件を確認できます。

search_columnsを使うと便利な場面

検索結果が多すぎる時や、用語集などをタイトル検索に近づけたい時に向きます。

やりたいこと指定例向いている理由
タイトルだけで探したいpost_titleを指定記事名・用語名の検索に向いている
抜粋も含めて探したいpost_titleとpost_excerptを指定一覧文に重要語句を入れているサイトで使いやすい
本文まで広く探したいpost_contentを含める検索漏れを減らしたいときに向いている

対象を狭めるほどノイズは減りますが、本文にしかない語句は見つからなくなります。 代表的な検索語で変更前後を比べて決めます。

タイトルと抜粋だけを検索対象にする例

タイトルだけでは狭すぎる場合は抜粋も加えます。次の差分を、最初の$args定義直後、$query = new WP_Query( $args );より前へ置きます。検索語や対象投稿、表示ループはそのままです。

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPsearch-title-excerpt-args.php同じ検索語で、タイトルと保存済み抜粋へ対象を広げる差分
$args['search_columns'] = [ 'post_title', 'post_excerpt' ];

ID53に加え、抜粋にWordPressがあるID26も表示されます。post_contentを含めていないため、本文だけに検索語がある投稿は対象外です。

WordPressをタイトルと抜粋から検索し、ID53とキャッシュ記事ID26の2件が表示されるサイト
タイトルと抜粋抜粋に語があるID26も加わる

search_columnsへpost_excerptを追加した結果はID53・26。検索語と比較用の3投稿は変えていません。

本文だけにある語でも検索対象を比べる

同じ3投稿でsだけをWP_Queryへ変えると、タイトルのみ・タイトルと抜粋では0件です。search_columnsを[ ‘post_content’ ]へ変えると、本文にその語があるID15が出ます。指定を外した標準の3列検索でもID15が出ます。

検索対象WordPressの結果WP_Queryの結果
post_titleのみID530件
post_titleとpost_excerptID53・260件
post_contentのみID53ID15
指定なし:標準3列ID53・26ID15

0件の時は本文コードの「一致する投稿はありませんでした。」を表示します。タイトルだけの検索で本文の語が出ないことは、クエリの不具合ではなく、指定どおりの結果です。

検索対象を変えた結果の違いが分かったら、WP Query Builderで検索語と対象カラムを整理できます。生成した$argsを表示ループへ渡し、タイトルにある語と本文だけの語で結果を見比べます。

検索対象を絞る$argsを作る

s、search_columns、post_type、件数を選んで$argsを作れます。フォーム連携、未入力時の分岐、対象WordPress版は別に確認してください。

search_columnsでカスタムフィールドは検索できる?

カスタムフィールドの値を探したい場合はACFの値が検索できない時の確認ポイントへ進みます。検索条件を減らしても0件のままなら、投稿が表示されない時のチェックリストで出力側まで切り分けてください。

カスタムフィールドは対象にできません。search_columnsが対応するのはpost_title、post_excerpt、post_contentの3つです。

カスタムフィールドで絞り込みたい場合は、search_columnsではなくmeta_queryを検討します。たとえば、価格、開催日、表示フラグ、商品コードのような値で投稿を絞るなら、検索キーワードsではなく、カスタムフィールドの条件として考えた方が整理しやすいです。

カスタムフィールド、タクソノミー、投稿タイプの条件は、それぞれmeta_query、tax_query、post_typeへ分けます。

search_columnsを使うときの注意点

search_columnsはWordPress 6.2で導入されました。配布テーマやプラグインで使う場合は、対象環境が6.2以降かを確認します。

これは検索範囲の指定であり、検索性能を一律に解決する設定ではありません。

うまく動かないときの確認順

s、投稿タイプ、検索対象カラムだけの最小構成で確認します。post_typeやpost_statusで、対象投稿が最初から外れていないかも見てください。

対応しない列名は除かれます。たとえば[ ‘post_title’, ‘price’ ]なら有効なpost_titleが残るため、タイトル検索です。[ ‘price’ ]のように有効な列が一つもない場合や空配列では、標準の3列へ戻ります。 「間違った列名なら0件になるはず」とは考えないでください。

この3投稿をWordPressで探す場合、[ ‘post_title’, ‘price’ ]はID53、[ ‘price’ ]と空配列はID53・26です。query varsには指定した値が残ることもあるので、それだけで有効な検索対象を判断せず、実際の結果や生成SQLも見ます。post_search_columnsフィルターを使うテーマ・プラグインの影響も切り分けます。

なお、sを外すとsearch_columnsだけでは検索しません。この例なら比較用の3投稿すべてが出ます。検索フォームの未入力を「0件」と扱いたい場合は、空のキーワードでクエリを実行する前に案内を出す分岐が必要です。

確認する順番

  1. 1
    sに検索キーワードが入っているか確認する
  2. 2
    search_columnsの値がpost_title、post_excerpt、post_contentのいずれかになっているか確認する
  3. 3
    post_typeで対象の投稿タイプが含まれているか確認する
  4. 4
    posts_per_pageを小さい数にして結果を見やすくする
  5. 5
    本文だけにある語句でテストして、検索対象の違いを確認する

タイトルだけを対象にして本文だけの語句が出ないのは正常です。タイトルにある1語でも出ない場合は、投稿タイプ、公開状態、表記、別条件を確認します。

この記事のコードは別のWP_Queryによる独自一覧です。サイト全体の検索フォームやメイン検索クエリを自動で変更するものではありません。フォーム連携では検索語の受け渡しと未入力時の動き、メイン検索の変更ではpre_get_postsの対象条件を別に設計します。

search_columnsと検索対象カラムの公式資料

WP_Queryの公式リファレンスでs、search_columns、対応カラムを確認できます。

公式リンク

公式ドキュメント

検索対象の最終判断

  • 検索漏れとノイズのどちらを減らす目的か決めた
  • 対象カラムをpost_title・post_excerpt・post_contentに限定している
  • WordPress 6.2以降の機能として扱っている
  • ACFなどpost metaの検索と混同していない
  • 変更前後の検索結果件数と代表キーワードを比較した
WP Query BuilderBuilderで条件を組み直す条件を選び、WP_Queryのコードを画面で作れます。Builderでクエリを作る

この記事を書いた人

Huddly

Web制作 / フロントエンドエンジニア

WordPressとフロントエンド実装で迷いやすい点を、公式情報と検証結果を分けながら、初学者にも追いやすい順序で整理しています。

この記事の検証情報

検証環境

WordPress
7.1.4
PHP
8.3.36
テーマ
wpq-media + DDEV
対象
カスタム投稿 / taxonomy / meta_query

更新履歴

  • 2026年10月3日 初回公開

この記事を活用する

あとで見返す・共有する

お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。

任意のご支援 役に立ったときだけ、活動を応援できます OFUSEはサイト・記事制作に使います。支援の有無で、読める内容や使える機能は変わりません。