2015年05月22日

昨日、自身が身に着けたスキルをメモ帳代わりとして記事にしましたので
少し前に請け負った、ワードプレスでカスタムフィールドの値を参考に
絞り込み検索機能のついたサイトを作成したので
そちらの方も記事にしたいと思います。

まずは絞り込み検索した結果を表示するページに関してですが
これはsearch.phpに表示させるようにします。
このsearch.phpはワードプレスのテーマには大体、標準についていて
「テーマの編集」の項目で、「検索結果」として表示されますが
このsearch.phpに関しては、「s」というパラメータに対して
検索ワードを格納して表示される仕組みになっています。

つまり、「s」の中に検索ワードが入っていなかったら
検索結果のページ(search.php)が表示されません。
この現象を回避するため、function.phpに以下のコードを指定する必要があります。


function custom_search($search, $wp_query  ) {
    if ( isset($wp_query->query['s']) ) $wp_query->is_search = true;
    return $search;
}
add_filter('posts_search','custom_search', 10, 2);

では早速、絞り込み検索を作り込んでいきますが
まず、「カスタムフィールドテンプレート」のプラグインをインストールします。
しなくてもいけるかもしれませんが、カスタムフィールドの設定が楽なので
私は利用しています。

カスタムフィールドテンプレートをインストールしたら
絞り込み検索で表示させる記事に対して、カスタムフィールドを設定していきます。

例えば、カスタムフィールドに「ワード1」という項目を作成したとします。
「ワード1」に「キーワードA」と入力したページ(ここでは「ページA」とします)と、
入力していないページ(「ページB」)を作成します。
そして、絞り込み検索にてチェックボックスで「キーワードA」を指定し
チェックを入れたらページAが表示、チェックを入れなかったら
「ページA」「ページB」が、共に表示されるようになる仕組みです。

それでは、まず絞り込み検索を行うページの作成ですが
絞り込み検索を行うページには、formタグにて作成していきます。


<form method="get" action="<?php bloginfo('url'); ?>">
<input type="hidden" name="s" id="s" placeholder="検索" /><br />

<input type="checkbox" name="search-word" value="キーワードA">キーワードA<br />
<input type="checkbox" name="search-word" value="キーワードB">キーワードB<br />

<input type="submit" name="submit" value="上記の条件で検索">

</form>

上記のコードが絞り込み検索を行う部分のformタグです。
カスタムフィールドテンプレートのIDは、ここでは「search-word」と設定します。
このカスタムフィールドのIDは、自分で考えたワードで結構です。
そして、inputタグのname属性に「search-word」を設定し
valueの値は、絞り込みしたいキーワードを指定します。

また最初に書きましたが、ワードプレスのsearch.phpはsのパラメータで表示させるので
type属性にhiddenを指定して、隠しパラメータとして送信する必要があります。

絞り込み検索を行うページの作成が終わったら
今度は、その絞り込み検索の結果を表示させるために
search.phpに、PHPを記述していく必要があります。


<?php
$s = $_GET['s'];
$word = $_GET['search-word'];

foreach($word as $keyword){
	$jouken[] = array(
		'key' => 'search-word',
		'value' => $keyword,
		'compare' => '='
	);
}

$paged = get_query_var('paged');

query_posts(
array(
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => 20,
'meta_query' => array(
	$jouken,
	'relation' => 'AND'
),
'paged' => ( $paged ) ? intval($paged) : 1
));
?>

絞り込み検索の結果の表示ですが、「query_posts」でページ情報を取得し
表示させています。

inputタグで送信したvalueの値を「$word」に格納。
そして、foreachにて$joukenの中に配列として、格納していきます。

…とまあ、一通りのコードと大雑把な説明で書いてきましたが
私自身、まだ理解していない部分があったりします。
ちなみに、この絞り込み検索の作成を行うに当たっては
「KOTORI」さんのページを参考にさせていただきました。
かなり四苦八苦したのですが、上手くいった時には
なんとも言えないような快感にも似た感覚でしたw

このカスタムフィールドによる絞り込み検索ですが
例えばカスタムフィールドに数値を入力し
特定の数値の範囲内ならば表示するといった検索も可能みたいです。
不動産関係や、ネットショップの販売価格による絞り込み検索なんかにも実装できそうです。



コメントする

名前
URL
 
  絵文字