カスタムフィールドの値(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);//実行 ?>