web-dev-qa-db-ja.com

特定のページの検索からカテゴリを除外する

私は私のサイトの2ページとarchiveという私のページに検索バーがあります。検索からEconomics(id - 9)というカテゴリを除外します。これを自分のfunctions.phpファイルに入れました:

function archive_search_filter( $query ) {
  if ( $query->is_search && $query->is_main_query() ) {
  $query->set( 'category__not_in' , '9' );
  }
}
add_filter( 'pre_get_posts', 'archive_search_filter' );

それは完璧に動作しますが、私はこれをarchiveと呼ばれるページに実装したいだけです。これと一緒にis_page( 'archive')を使ってif文を試してもうまくいかないし、解決策もわからない。それがどのページであるかを知ることができる前にfunctions.phpがロードされるかどうか、そしてこれを機能させる別の方法があるかどうか私は思っています。

1
jessica mele

問題は、pre_get_postsが呼び出されるということです あなたはページを離れているので、検索がそこから行われたかどうかを確認するためにテストする必要があります。そのために wp_get_referer() を使用できます。

だから 理論的には、これをテストする時間がありませんでした あなたは

if ( !is_admin() && $query->is_search() && $query->is_main_query() && wp_get_referer() == "http://www.example.com/archive" ) {

それが役立つことを願っています

PS:あなたがadminクエリに影響を与えていないことを確実にするために!is_admin()チェックを常に追加します…ベルトと中括弧!

1
Peter HvD

次のコードを試してください。

function archive_search_filter( $query ) {
    if ( ! is_admin() && is_page( 'archive' ) ) {
        $query->set( 'category__not_in' , '9' );
    }
}
add_filter( 'pre_get_posts', 'archive_search_filter' );
1
obiPlabon