この記事は最後に更新してから1年以上経過しています。

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

説明

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クラス)は、投稿タイトルと投稿内容の両方を検索するので、投稿タイトルと同じ文字列が投稿内容に書かれている投稿情報をヒットしてしまうが、実用的には問題ないだろう。


最終更新 : 2014年02月20日 16:28


お勧め

get_the_post_thumbnail_caption(2018年5月27日 更新)

string get_the_post_thumbnail_caption( mixed $post = null )
投稿ページのサムネイル(アイキャッチ画像)キャプションを取得する。

wp_enqueue_style(2019年11月25日 更新)

void wp_enqueue_style( string $handle [ , string $src = false [ , array $deps = array() [ , string $ver = false [ , string $media = 'all' ] ] ] ] )
使用するスタイルシート(CSS)を出力用のキューに入れる。パラメータ$srcが指定された場合は、グローバル変数$wp_stylesに登録してから出力用のキューに入れる。

post_class(2018年5月27日 更新)

void post_class( [ string $class = '' [ , int $post_id = null ] ] )
投稿情報の種別に応じたクラス属性(class="post-?? post ...")を表示する。具体的なクラス名は、投稿ID(post-番号)、投稿種別(postやpage)、カテゴリー(category-名前)、タグ(tag-名前)などがある。これらクラス名に合わせたCSSを準備することで、投稿ページのユニークなデザインが表現可能になる。

get_header(2020年8月18日 更新)

void | false get_header( [ string $name = null [ , array $args = array() ] ] )
ヘッダパーツを記述したメインヘッダファイルheader.php(またはサブヘッダファイルheader-???.php)を読み込む。

get_the_excerpt(2018年5月27日 更新)

string get_the_excerpt( [ mixed $post = null$deprecated = '' ] )
投稿情報の抜粋記事を取得する。