• 解決済 amentis_2

    (@amentis_2)


    こんにちは。
    現在wp user frontendでフロントエンドからのタイトル、本文、カスタムフィールドの投稿型サイトを作成しています。会員はカスタムフィールドの値を自由にテキスト入力によって投稿することができるようになっており、今回はその値で検索できるようにしたいと考えています。

    例:meta_key:電話番号
      meta_value:09012345678
    検索ボックスに09012345678を入力した際にだけ完全一致で投稿記事を表示させたい

    もしくはwp custom fields searchで望むような結果が得られていたのですが、URLを適当に改変するとアーカイブ一覧が表示されてしまい、確実に検索語句と完全一致の結果のみ表示させたいとおもっているので

    http://sample.com/?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-1&cs-all-0=09012345678&search=Search

    上記のようなURLが出力されてしまうため、上記URLのDB_CustomSearchなどを削除してアクセスすると一覧ページにアクセスしてしまいます。このURLを

    http://sample.com/search/09012345678/

    といったものにはできないのでしょうか。これなら空白で検索された時もTOPページにリダイレクトさせれば良いのではないかと考えています。

    どうかお知恵をお借りしたいと思っております。宜しくお願いします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 amentis_2

    (@amentis_2)

    下記記述を試してみましたがうまくいきません。

    <div id="search-box">
    <form method="get" action="<?php bloginfo( 'url' ); ?>">
        <input name="s" id="s" type="text" />
    <h4>電話番号</h4>
        <input name="meta_text" type="text" />
        <input id="submit" type="submit" value="検索" />
    </form>
    </div>
    function custom_search_join($join){
        if(!empty($_REQUEST['meta_text'])) {
            $join .= "INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)";
        }
        return $join;
    }
    add_filter( 'posts_join', 'custom_search_join' );
    
    function custom_search($search, $wp_query) {
        //サーチページ以外だったら終了
        if (!$wp_query->is_search) return;
        //投稿記事のみ検索
        $search .= " AND post_type = 'post'";
        return $search;
    }
    add_filter('posts_search','custom_search', 10, 2);
    //カスタムフィールドで検索
    if (!empty($_REQUEST['meta_text'])) {
        $meta_text = "'%" .mysql_real_escape_string($_REQUEST['meta_text']). "%'";
        $search .= "
            AND wp_postmeta.meta_key = 'custom1'
            AND wp_postmeta.meta_value LIKE {$meta_text}";
    }

    コピペばかりで中身を理解していないのが露呈しており大変お恥ずかしい限りです。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「カスタムフィールドでの完全一致検索がしたい!」には新たに返信することはできません。