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

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

説明

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 - 条件を指定して投稿情報をロードする

お勧めコンテンツ

get_term_by(2010年1月5日 登録)

mixed get_term_by( string $field , mixed $value , string $taxonomy [ , string $output = OBJECT [ , string $filter = 'raw' ] ] )
ID、名前、スラッグを指定してカテゴリー・タグ情報を取得する。

query_posts(2009年11月12日 登録)

array query_posts( mixed $query )
投稿情報を条件を指定して検索し、マッチしたすべてのデータをグローバル変数$postsに、その先頭データを$postにロードする。

update_post_meta(2010年2月13日 登録)

bool update_post_meta( int $post_id, string $meta_key, mixed $meta_value [ , mixed $prev_value = '' ] )
投稿情報のカスタムフィールド情報を更新する。指定した名前のカスタムフィールドがない場合は追加する。

wp_delete_file(2015年4月26日 登録)

void wp_delete_file( string $file )
ファイルを削除する。

esc_attr_e(2010年6月17日 登録)

void esc_attr_e( string $text [ , string $domain = 'default' ] )
現在のロケールに応じた翻訳テキストを取得し、その中に含まれている特殊文字をHTMLエンティティに変換してから表示する。

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