つながるnet

カスタムフィールドの値(メタデータ)で絞り込み検索

カスタムフィールドの値(meta)での絞り込み検索の需要はけっこうあるのではないでしょうか。

例えば次のような場合です

  • 物件情報(カテゴリ)
    • 土地(子カテゴリ)
      • 新宿区(子カテゴリ?)
      • 江東区(子カテゴリ?)
      • 中央区(子カテゴリ?)
    • 建売(子カテゴリ)
      • 新宿区(子カテゴリ?)
      • 江東区(子カテゴリ?)
      • 中央区(子カテゴリ?)

このようなカテゴリ構造で、子カテゴリに地域名をそれぞれ複数設けたい場合、地域名をそれぞれの子カテゴリごとに、さらに子カテゴリとするなら、重複した名前のカテゴリを設けることになります。これではどうもすっきりしません。

このような場合、地域名を子カテゴリ扱いではなく、カスタムフィールドの値にしてしまえば、すっきりします。
商品紹介サイトなどでも活用できます。(商品分類をカテゴリに、色やサイズ等をカスタムフィールドに)
カスタムフィールドをチェックボックス化(あるいはドロップダウン化)するには Custom Field GUI Utility  というプラグインが定番です。)
次のようなイメージです

  • 物件情報(カテゴリ)
    • 土地(子カテゴリ)
      • 新宿区(カスタムフィールド「area」)
      • 江東区(カスタムフィールド「area」)
      • 中央区(カスタムフィールド「area」)
    • 建売(子カテゴリ)
      • 新宿区(カスタムフィールド「area」)
      • 江東区(カスタムフィールド「area」)
      • 中央区(カスタムフィールド「area」)

ではどのようにして絞り込み検索を実装するのでしょうか。

簡単に言うと、
地域名をpostしてpost_queryに渡せるようにすれば実現できそうです。

<?php
	$area = $_GET['area'];//urlにpostが渡されていればそれを取得(urlの例 → http://ドメイン/カテゴリスラグ/?area=新宿区)
	$catSlg = $category_name;//カテゴリスラグを取得
	$cfKey = 'area';//カスタムフィールドのキー名
//続くリストタグで、絞り込み用のリンクを生成。
//これを応用して、チェックボックスなどにして、複数のカスタムフィールドの値による絞り込みも可能。
?>
	<ul>
		<li><a href="<?php echo get_option('home'); ?>/<?php echo $catSlg ?>"><?php echo ($area == '')? "<strong>すべて</strong>":"すべて" ?></a></li>
		<li><a href="<?php echo get_option('home'); ?>/<?php echo $catSlg ?>/?area=新宿区"><?php echo ($area == '新宿区')? "<strong>新宿区</strong>":"新宿区" ?></a></li>
		<li><a href="<?php echo get_option('home'); ?>/<?php echo $catSlg ?>/?area=江東区"><?php echo ($area == '江東区')? "<strong>江東区</strong>":"江東区" ?></a></li>
		<li><a href="<?php echo get_option('home'); ?>/<?php echo $catSlg ?>/?area=中央区"><?php echo ($area == '中央区')? "<strong>中央区</strong>":"中央区" ?></a></li>
	</ul>

カスタムフィールドのキー($cfKey)を、その値($area)で絞り込むにはquery_postsを使います。

<?php
$args = array(
		'category_name' => $catSlg,//カテゴリスラグによる絞り込み
		'meta_query' => array(//カスタムフィールドによる絞り込み
			array(
				'key' => $cfKey,//カスタムフィールド名
				'value' => $area,//カスタムフィールドの値
				"compare" => "LIKE"
			)
		),
		'posts_per_page' => 10,//1ページあたりの表示件数
		'paged' => $paged
	);
query_posts($args);//実行
?>

直接メールしてみる

お名前 (必須)
メールアドレス (必須)
件名
ご相談内容
画像文字をご入力ください
captcha

コメントを残す