サポート » 使い方全般 » カスタム投稿とタクソノミーによる数値範囲の絞り込み検索について

  • 解決済 berghilo

    (@berghilo)


    いつもフォーラムではお世話になっています。

    WordPress 3.4.1
    Custom Field Template 2.0.4
    カスタム投稿はfunctions.phpに記入

    カスタム投稿とタクソノミーによる絞り込み検索を行いたく、四苦八苦しやっと下記の方法で出来るようになりました。

    <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
    キーワード
    <input type="text" name="s" id="s">
    
    <input type="hidden" name="post_type" value="カスタム投稿名" />
    ラベル名1
    <select name="タクソノミー名">
    <option value="" selected="true">指定しない</option>
            <?php
            $home = site_url('/');
            $tname = get_terms( 'タクソノミー名', 'order=ASC' );
                foreach ( $tname as $term ) {
                echo '<option class="level-0" value="'. $term->slug .'">'. esc_html($term->name) .'</option>';
                 }
            ?>
    </select>
    
    <input type="hidden" name="post_type" value="カスタム投稿名" />
    ラベル名2
    <select name="タクソノミー名">
    <option value="" selected="true">指定しない</option>
            <?php
            $home = site_url('/');
            $tname = get_terms( 'タクソノミー名', 'order=ASC' );
                foreach ( $tname as $term ) {
                echo '<option class="level-0" value="'. $term->slug .'">'. esc_html($term->name) .'</option>';
                 }
            ?>
    </select>
    
    以下絞り込みの数だけ繰り返し
    
    <input type="submit" id="searchsubmit" value="検索" />
    </form>

    こうすると、
    http://ドメイン名/?s=&post_type=カスタム投稿名&ラベル1=(selectで選択した)ターム名&ラベル2=(selectで選択した)ターム名

    のようになり、意図した絞り込み検索ができました。

    そこで今度は、金額などの指定範囲ができないものかと思っていろいろ試したのですが、実現できずに苦労しております。

    商品金額
    <select>
    <option>1000円~2000円</option>
    <option>2000円~3000円</option>
    <option>3000円~4000円</option>
    </select>
    といったものです。

    こういった金額表示はそもそもタクソノミーに入力するよりも、カスタムフィールドあたりに登録したものを利用した方がいいのかとも思っています。
    そうなると、上記のカスタム投稿の
    &post_type=カスタム投稿名&ラベル1=(selectで選択した)ターム名&ラベル2=(selectで選択した)ターム名
    に結合させる方法が分かりません。

    カスタム投稿のタクソノミーかカスタムフィールドどちらでも構わないのですが、数値の範囲指定の検索をselectタグで指定できる方法をご伝授いただけたらと思っています。

    何卒、よろしくお願いいたいします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    トピック投稿者 berghilo

    (@berghilo)

    アドレスご紹介ありがとうございます。

    私の場合、ご紹介サイトの functions.phpに書くコード無しで何故かdivision=sales的なパラメーターが実現していました。

    http://ドメイン名/カスタム投稿 のアドレスではなく、http://ドメイン名/?s= というsearch.phpを利用しているからでしょうか。その辺は不明です。

    引き続き、
    <select>
    <option>1000円~2000円</option>
    <option>2000円~3000円</option>
    <option>3000円~4000円</option>
    </select>
    といったような、数値の範囲指定の検索をselectタグで指定できる検索方法をご伝授いただけたらと思います。

    よろしくお願いいたいします。

    「商品金額タクソノミー」を作って
    金額範囲「1000円~2000円」「2000円~3000円」「3000円~4000円」をタームにすれば
    ラベル1, ラベル2 と同様に絞り込みできます。

    何故かdivision=sales的なパラメーターが実現

    タクソノミーだからです。記事はカスタムフィールドで絞り込みするという内容です。

    トピック投稿者 berghilo

    (@berghilo)

    「商品金額タクソノミー」を作って
    金額範囲「1000円~2000円」「2000円~3000円」「3000円~4000円」をタームにすれば
    ラベル1, ラベル2 と同様に絞り込みできます。

    了解いたしました。
    やはりこの手しか有りませんか。

    タクソノミーだからです。記事はカスタムフィールドで絞り込みするという内容です。

    失礼しました。
    タクソノミーだと不要だと認識いたしました。

    #未検証

    1. 例)’price’ というキーのカスタムフィールドに金額を登録するようにします。
    2. 例)「商品金額」用 select の各 option の value 値を以下のようにします。
      1000〜2000円 なら ‘1000,1999’
      2000〜3000円 なら ‘2000,2999’
      3000〜4000円 なら ‘3000,3999’
    3. テーマフォルダの functions.php に以下をコピペします:

    add_action( 'pre_get_posts', 'my_pre_get_posts' );
    function my_pre_get_posts( $query ) {
      if ( $query->is_main_query() ) {
        if ( isset( $_GET['price'] ) {
          $prices = explode( ',', $_GET['price'] );
          if ( 2 == count( $prices ) ) {
            $meta_query = array(
              'key' => 'price',
              'value' => array_map( 'intval', $prices ),
              'compare' => 'BETWEEN',
            );
            $query->set( 'meta_query', array( $meta_query ) );
          }
        }
      }
    }

    タイポ的なものがありましたら良きにはからってください。

    トピック投稿者 berghilo

    (@berghilo)

    kzさん、あきらめかけていたところ、ご連絡ありがとうございます。

    早速検証してみたところ、 functions.phpがエラーになってしまいました。
    タイプミスではないと思いますが、ご連絡を頂いたコードではなく、別の行数がエラー表示されました。

    エラーになっている箇所の周辺のコードを見せていただくと何かわかるかもしれません。

    トピック投稿者 berghilo

    (@berghilo)

    kzさん、ご連絡ありがとうございます。
    すべてお願いしては申し訳ないと思い、有る程度特定しようと何も手を加えていないtwentyelevenの functions.phpに追記して確認したところ、やはりエラーでした。
    今度は先頭にお教えいただいたコードを記入したところ、
    if ( isset( $_GET[‘price’] ) {
    の箇所が特定でき、
    if ( isset( $_GET[‘price’] )) {
    と修正して、無事エラーを回避できました。

    また、肝心の検索はカスタム投稿タイプで作った検索に&price=2000%2C2999のように結合し、見事検索できました。
    大変ありがとうございました。
    大感謝です。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「カスタム投稿とタクソノミーによる数値範囲の絞り込み検索について」には新たに返信することはできません。