サポート » 使い方全般 » カスタム投稿の検索結果(search.php)で、特定のターム記事を除外したい

  • 解決済 fujikana

    (@fujimon)


    カスタム投稿の検索結果をsearch.phpで一覧表示していますが、
    特定のタームに属する記事を検索結果一覧から除外したいのです。

    ・カスタム投稿:hope
    ・カスタムタクソノミー:colorg
    ・除外したいターム:open

    function.phpに以下の記述をして、archive-hope.phpからは上手く除外できました。

    function custom_posts_per_page($query) {
    if( is_admin() || ! $query->is_main_query() ){
    return;
    }
    if ( $query->is_post_type_archive( ‘hope’ )) {
    $taxquery = array(
    array(
    ‘taxonomy’ => ‘colorg’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( ‘open’ ),
    ‘operator’ => ‘NOT IN’,
    )
    );
    $query->set( ‘tax_query’ , $taxquery );
    return;
    }
    add_action( ‘pre_get_posts’, ‘custom_posts_per_page’ );

    上記ソースコードの、
    if ( $query->is_post_type_archive( ‘hope’ )) {

    if ( $query->is_search(‘hope’)) {
    若しくは
    if ( $query->is_search()) {

    に変更して追記しているのですが、除外が上手くできずに困っています。
    どなたかお教え願えませんでしょうか。

    どうぞよろしくお願い申し上げます。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • if ( $query->is_search ) { でいけませんか?

    トピック投稿者 fujikana

    (@fujimon)

    mirucon様

    ご返信大変ありがとうございます。
    早速該当箇所を仰せの通り試してみたのですが、反応しませんでした。
    何故なんでしょうか・・・。

    引き続きご協力いただけますと助かります。

    条件が 真になるかどうかチェックしてみてはと思います。
    if ( $query->is_search ) { の次の行に
    var_dump(“aaaaa”);

    とか適当なコードを出力するものを入れたりなどしてです。

    トピック投稿者 fujikana

    (@fujimon)

    kimipooh様

    ご返信大変ありがとうございます。
    申し訳ございません、知識が乏しくvar_dumpについて理解しておらず、
    仰せの通りにしてみたのですがフロントでは変化が見られずでした。

    それで今更で申し訳ございませんが、本件について大きな過ちというか
    そもそもの個所で私自身、勘違いしているようです。

    本件の検索機能は有料プラグインを使用してsearch.phpに結果を吐いているのですが、
    wordpress本体のウィジェット「検索」で任意の文字を入力して検索すると、
    同じsearch.php上で特定タームが除外されて吐き出されていることに先ほど気付きました。

    ですので絞り込み検索用のプラグイン側で何らかの処置をする必要があるのかな、
    と思っているのですが、その辺り定かではございません。

    いずれにしてもウィジェットの検索機能で実行すると除外されているのなら、
    if ( $query->is_search ) {
    で間違いないのかな、と。

    あきらめてテンプレート側のループ内でif文によるターム除外しか方法が考え付かないので、
    それ以外に方法があれば知りたいのですが、無理でしょうか。。

    どうぞよろしくお願いいたします。

    pre_get_posts というフックは WordPress コアのために用意されているものです。WP 付属の検索で効くのにもかかわらずそのプラグインの検索結果に反映されないのであれば pre_get_posts は効かないということだと思います。

    有料プラグインとなってしまうと余計にどのような挙動になっているのかもわからないです。

    mirucon さんがご指摘のように、有料プラグインが間に入っているなら、有料プラグインのサポートで聞いてみることがよいと思います。
    あるいは有料プラグインの利用を止めて、テストをしてみることです。

    トピック投稿者 fujikana

    (@fujimon)

    mirucon様

    ご返信ありがとうございます。
    pre_get_postsは本挙動を実装する前に色々調べていたら出てきましたし、
    仰る通りのようなことも記述していました。
    だから本体ウィジェットの検索機能ではちゃんと動くんですね。

    プラグインの件、説明不足で本当に申し訳ありませんでした。
    知識が無いのでfunction.phpへの記述方法が間違っているとばかり思いこんでいました。
    プラグイン販売元に一度お聞きしてみようと思いますが、
    内容次第でまたご報告させていただきます。
    ありがとうございました。

    トピック投稿者 fujikana

    (@fujimon)

    kimipooh様

    ご返信ありがとうございます。
    てっきり私の記述ミスか何かが原因かと決めつけておりました。
    3~4種類のタームでの複合検索が必要だったので有料プラグインに頼ったのですが、
    どうにか休止させずに動いてほしいと願っています。
    仰せの通り販売元に一度お伺いしてみようと思いますが、
    解決できればいいのですが・・・。

    お騒がせしてすみませんでした。
    また結果の方は報告できる内容ならばお伝えいたします。
    ありがとうございました。

    トピック投稿者 fujikana

    (@fujimon)

    ご報告いたします。

    やはり皆さんからご指摘いただいた通り、プラグイン側の問題だったようです。
    ファイルを差し替え、function.phpへ2行ほど追記することで解消されました。
    ここで相談しなかったら迷宮入りしていたはずなので、本当に助かりました。
    大変ありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタム投稿の検索結果(search.php)で、特定のターム記事を除外したい」には新たに返信することはできません。