タイトルが一致する投稿を検索する

タイトルが一致する投稿を検索する - 完全一致検索の指定方法

説明

WordPressが提供する投稿ページの文字列検索機能の実現には、query_posts関数(WP_Queryクラス)が大きな役割を担っている。ここで紹介するのは、高機能ゆえに使いこなすのが難しいquery_posts関数(WP_Queryクラス)の使用法の一例である。

query_posts関数(WP_Queryクラス)による文字列検索では、「投稿タイトル」および「投稿内容」を対象に指定された文字列が含まれる投稿情報を検索する部分一致検索が標準である。また、文字列をスペースやカンマなどで区切った文字列で検索すれば、それぞれの単語に分解し、すべて含んだ投稿情報を検索する。

このような仕様に特に不満を感じることはないわけだが、指定した文字列のタイトルの投稿情報を取得したいとした場合、残念ながら標準のままでは意図した結果を得ることはできない。

<?php $q1 = new WP_Query( array( 's'=>'Hello, world!' ) ); ?>
投稿タイトル検索結果
Hello, world!
Hello, world! again
world!, Hello

「Hello, world!」で検索した場合、上記投稿タイトルすべてがヒットする

検索する文字列を"(ダブルコーテーション)で囲む

一致する投稿タイトルを検索するためには、次のような対応が必要となる。

先に述べたように、通常はスペースやカンマなどを含んだ文字列は、分解されそれぞれが単語となって検索されるが、文字列を"(ダブルコーテーション)で囲むことでこのような分割を回避できる('(シングルコーテーション)で囲んでも分割されるので注意)。これにより、スペースを含んだ投稿タイトルのみを検索できるようになる。

<?php $q2 = new WP_Query( array( 's'=>'"Hello, world!"' ) ); ?>
投稿タイトル検索結果
Hello, world!
Hello, world! again
world!, Hello×

「"Hello, world!"」で検索した場合、投稿タイトル「world!, Hello」はヒットしない

exactパラメータを使う

query_posts関数(WP_Queryクラス)のパラメータには、exactパラメータがある。このexactパラメータは、省略またはfalse(0)が指定されている場合には部分一致となるが、true(1)が指定されている場合は完全一致として検索が行われる。

<?php $q3 = new WP_Query( array( 's'=>'"Hello, world!"', 'exact'=>true ) ); ?>
投稿タイトル検索結果
Hello, world!
Hello, world! again×
World!, hello×

exact=1を指定して「"Hello, world!"」で検索した場合、投稿タイトル「Hello, world!」のみがヒットする

exactパラメータについては、検索フォームにname属性値にexactを指定したチェックボックスなどを追加することで、既存サイトでも完全一致機能を容易に利用することができる。query_posts関数(WP_Queryクラス)は、投稿タイトルと投稿内容の両方を検索するので、投稿タイトルと同じ文字列が投稿内容に書かれている投稿情報をヒットしてしまうが、実用的には問題ないだろう。

関連

  • query_posts - 条件を指定して投稿情報をロードする

お勧めコンテンツ

wp_get_password_hint(2014年12月26日 登録)

string wp_get_password_hint()
パスワード生成時のヒントテキストを取得する。

selected(2010年6月24日 登録)

string selected( mixed $selected [ , mixed $current = true [ , bool $echo = true ] ] )
HTMLのselected属性を表示する。パラメータ$echoにfalseを指定した場合は表示しない。

get_the_comments_navigation(2015年12月16日 登録)

string get_the_comments_navigation( [ array $args = array() ] )
コメントナビゲーションを取得する。

post_type_supports(2016年5月25日 登録)

bool post_type_supports( string $post_type, string $feature )
投稿タイプが特徴(≒編集要素)を有しているか調べる。

has_filter(2011年2月18日 登録)

mixed has_filter( $tag, [ mixed $function_to_check = false ] )
WordPressタグにフィルターが登録されているか調べる。

最終更新日時 : 2014-02-20 16:28