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

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

説明

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_object_taxonomies(2016年1月12日 登録)

array get_object_taxonomies( mixed $object [ , string $output = 'names' ] )
投稿タイプのタクソノミー情報を取得する。

in_category(2010年9月27日 登録)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

wp_dropdown_categories(2012年3月23日 登録)

string wp_dropdown_categories( [ mixed $args = '' ] )
ドロップダウン形式のカテゴリーリストを表示または取得する。

get_next_comments_link(2015年12月16日 登録)

string get_next_comments_link( [ string $label = '' [ , int $max_page = 0 ] ] )
次のコメントリンクを取得する。

get_term(2011年2月24日 登録)

mixed get_term( mixed $term [ , string $taxonomy = '' [ , string $output = OBJECT [ , string $filter = 'raw' ] ] ] )
IDを指定してカテゴリー・タグ情報を取得する。

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