• wordpress の検索機能についての質問です。
    中古フィギュアの買取サイトを運営しているのですが、検索フォームからの検索結果が思うような結果にならず困っています。

    <form method="get" action="<?php bloginfo( 'url' ); ?>" class="sForm">
    <div class="searchDropdow"><?php wp_dropdown_categories('depth=1&hierarchical=true&selected=139&orderby=NAME&hide_empty=1'); ?></div>
    <input name="s" id="s" type="text" class="searchText" />
    <input id="submit" type="submit" value="検索" class="submitBtn" />
    </form>

    のように検索フォームを作成しています。
    2行目はカテゴリーの絞込のプルダウンメニューになります。

    検索対象の投稿ページには「カテゴリー」「タグ」「タイトル」「コンテンツ内容」があります。
    カテゴリー : フィギュアのジャンル
    タグ : メーカー名やシリーズ名
    タイトル : 商品名
    コンテンツ内容 : 買取価格
    を記載しています。

    例えば下記の3ページが投稿されていたとします。

    No | カテゴリー | タグ | タイトル | コンテンツ

    01 | フィギュア | ドラゴンボール | トランクス | 800円
    02 | ねんど | ドラゴンボール | 亀仙人 | 800円
    03 | ねんど | ガンダム | ガンタンク | 1000円
    ※Noは便宜上付けています。

    ここで「ドラゴンボール トランクス」と検索すると wordpress では AND検索なので「No.01」のみが検索結果に表示されることを期待しています。
    ところが検索結果では「01」「02]の2つが表示されます。
    「ねんど 亀仙人」で検索すると「02」「03」の2つが検索されます。
    「トランクス」で検索すると「01」のみが表示されます。
    「トランクス 800円」で検索すると「01」のみが表示されます。

    色々検証した結果、カテゴリーとタグに関しては検索キーワードのいずれかにマッチすると、全て表示するようです。
    カテゴリーとタグに関しては OR検索になっている感じです。

    「ドラゴンボール トランクス」で検索するとカテゴリーかタグに「ドラゴンボール」もしくは「トランクス」も文字が入っていれば、検索表示されてしまいます。

    これを「カテゴリー」「タグ」「タイトル」「コンテンツ内容」を含めての AND検索にしたいのですが、どのようにすればいいのかわかりません。
    ネットで調べてみたのですが、「カテゴリーでの絞込」や「タグでの絞込」などは出てくるのですが、同じような現象が起きているようなページは見つかりませんでした。
    (検索方法が下手なだけかもしれませんが)

    上記例で「ドラゴンボール トランクス」と検索すると「01」のみが表示されるようにするにはどうしたらよいのでしょうか?

    わかりづらい説明で申し訳ないのですが、ご教授いただけると助かります。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 原因はクエリの構成ではないかと思うのですが、最終的に抽出するクエリの構文はどうなっているのでしょうか。

    トピック投稿者 ryoji.nakashima

    (@ryojinakashima)

    msio 様

    返信ありがとうございます。

    僕の知識不足で申し訳ないのですが、「最終的に抽出するクエリの構文」というのがわかりません…。
    検索結果を表示するテンプレートに書かれているコードなどのことでしょうか?
    本当に申し訳ございません。

    functions.php に検索用のような次のコードが書かれてありました。
    
    /* 検索用 投稿記事のみを対象とする */
    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);

    こちらで検索を実行されているようなのですね。
    この構文ですと、AND文というのは「~と、それと(AND)投稿記事形式であること」という条件のようです。
    Aと、Bと、それと、それは投稿記事であること、という検索だと思います。
    なので全部でてきてしまうのだと思います。

    別途抽出するための構造を作成するか、もしくはプラグインなどで適したものがあればと思うのですがプラグインが最も近道かとも思うのですが、私自身プラグインに関してはとても疎く候補を存じません。

    抽出の構造をおすすめしたいところですがカスタマイズなど苦手でいらっしゃればやはりプラグインないしは全体構造を把握したうえでの作業がよいかと思います。

    結果として現状では改善の余地がないかと思いますので、次にプラグイン選定の手段をご考慮いただければというところまでしかご協力できず申し訳ございません。

    トピック投稿者 ryoji.nakashima

    (@ryojinakashima)

    msio 様

    ご回答ありがとうございます。

    funcitions.php のここの部分が原因の可能性があるのですね。
    これがわかるだけでも助かります。
    カスタマイズは自分では多分難しいだろうと思いますので、
    ネットで情報を探しつつプラグインも同時に探してみます。

    丁寧に教えていただき心から感謝します。
    ありがとうございました。

    こんにちは

    その箇所は検索結果を投稿(post)のみに絞り込んでいるだけで、キーワードをOR条件にしていることとは無関係だと思います。
    キーワードに関するSQL条件変更の記述がないからです。

    他に検索に関するプラグインなど入れていないか、他の箇所にposts_searchフィルターフックがないでしょうか?

    トピック投稿者 ryoji.nakashima

    (@ryojinakashima)

    munyagu 様

    ご回答ありがとうございます。

    調べてみたら知らない間に「search everything」がインストールされていました。
    このプラグインが悪さをしてみたみたいです。
    search everything でカテゴリーやタグを検索対象とするように設定したらしいのです。
    functions.php でカテゴリーやタグを検索対象とするように設定しましたら解決しました。

    プラグインをちゃんと調べてなかったという初歩的なミスでした。

    ご指摘がなかったら気づかなかった可能性が高かったです。

    本当にありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)

トピック「【検索】AND検索の検索結果が間違って表示される」には新たに返信することはできません。