メインコンテンツへ移動

Snow Monkey Search: 検索フォームのターム表示制御と検索結果フィルタリングについて

0
Who liked: No user
1件の投稿を表示中 - 1 - 1件目 (全1件中)
  • 投稿者
    投稿
  • #145156
    アバター画像原子恭一
    参加者
    5

    【お使いの Snow Monkey のバージョン】29.0.0
    【お使いの Snow Monkey Blocks のバージョン】24.0.4
    【お使いの Snow Monkey Editor のバージョン】11.0.1
    【お使いのブラウザ】Google Chrome
    【当該サイトのURL】

    いつも大変お世話になっております。

    Snow Monkey Search を使用した検索機能において、実現したいことがあり、フォーラム内でも探したのですが解決しないので、ご質問させていただきます。

    【実現したいこと】

    カスタム投稿タイプ「クローゼット(スラッグ: closet)」があり、これにカスタムタクソノミー「スタイル(スラッグ: style)」が関連付けられています。「スタイル」タクソノミーには、Classic, Stylish, Vivid, REMIX, LIMITED というタームがあります。

    1.検索フォームのターム表示制御:
    検索フォームに表示される「スタイル」の選択肢(ラジオボタンまたはチェックボックス)から、特定のターム(例: LIMITED)を条件付きで非表示にしたい。具体的には、通常の検索ページでは LIMITED を表示せず、特定の会員専用ページでは LIMITED を表示したいと考えています。

    2.検索結果のフィルタリング:
    上記のフォーム表示制御に加え、通常の検索結果からは、LIMITED スタイルに属する「クローゼット」投稿を完全に除外したい。会員専用ページでの検索では LIMITED も含めて検索できるようにしたいのです。

    【試したことと現在の状況】

    1.検索フォームのターム表示制御について:
    このフォーラムの過去ログを参考に、sms_taxonomy_search_terms フィルターフックを使用することで、検索フォームの「スタイル」の選択肢から「LIMITED」タームを条件付きで非表示にすることに成功しました。このフックは大変役立ちました。ありがとうございます。

    2.検索結果のフィルタリングについて:
    次に、検索結果から「LIMITED」タームを持つ投稿を除外するため、WordPress 標準の pre_get_posts アクションフックを使用し、検索結果ページのメインクエリ ($query->is_search() && $query->is_main_query()) に対して、以下のように tax_query を設定しました。

    // functions.php に追加したコードの抜粋
    add_action( ‘pre_get_posts’, function( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
    return;
    }

    if ( $query->is_search() /* && 通常検索であることの追加条件 */ ) {
    $tax_query = $query->get( ‘tax_query’ );
    if ( ! is_array( $tax_query ) ) {
    $tax_query = array( ‘relation’ => ‘AND’ );
    }
    $tax_query[] = array(
    ‘taxonomy’ => ‘style’,
    ‘field’ => ‘slug’,
    ‘terms’ => ‘limited’,
    ‘operator’ => ‘NOT IN’,
    );
    $query->set( ‘tax_query’, $tax_query );
    // デバッグログで $query->get(‘tax_query’) を確認
    }
    } );

    デバッグログ (debug.log) を確認したところ、上記の pre_get_posts フックは検索結果ページのメインクエリに対して正しく呼び出され、$query->get(‘tax_query’) には意図した通り「style タクソノミーの limited タームを NOT IN で除外する」条件が設定されていることが確認できました。ログの抜粋は以下の通りです。

    [日付時刻] pre_get_posts is_search(): true | is_main_query(): true
    [日付時刻] pre_get_posts: is_search() is true. tax_query を設定します。
    [日付時刻] pre_get_posts: 設定後のtax_query: Array
    (
    [relation] => AND
    [0] => Array
    (
    [taxonomy] => style
    [field] => slug
    [terms] => limited
    [operator] => NOT IN
    )
    )

    しかしながら、この状態で検索を実行しても、実際の検索結果ページには依然として「limited」タームを持つ投稿が表示されてしまいます。
    この状況から、Snow Monkey Search (あるいは Snow Monkey テーマの検索結果表示処理) が、pre_get_posts で変更されたメインクエリの結果を最終的な表示に利用していない、あるいは何らかの形でその変更を上書きしているのではないかと推測しています。

    つきましては、pre_get_posts でメインクエリの tax_query を変更しても Snow Monkey Search の検索結果に反映されない場合、Snow Monkey Search の検索結果から、特定の条件(例:特定のタクソノミーの特定のタームを持つ)に合致する投稿を除外するための、推奨されるフックや他のカスタマイズ方法がございましたらご教示いただけますでしょうか。

    例えば、Snow Monkey Search が生成する検索結果の投稿配列($posts など)を直接フィルタリングできるフックなどはございますでしょうか。

    お忙しいところ大変恐縮ですが、ご回答いただけますと幸いです。
    どうぞよろしくお願いいたします。

    0
    Who liked: No user
1件の投稿を表示中 - 1 - 1件目 (全1件中)
  • このトピックに返信するにはログインが必要です。

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。