WordPressで検索結果から特定のカテゴリを除外するコード

WordPressで有料記事を販売している場合等に、有料記事に検索ワードが含まれていた場合、デフォルトでは検索結果に有料記事も一緒に表示してしまいます。

これだと有料記事の内容が購入者以外にもバレてしまうかもしれませんので、これはぜひ回避したいですよね。

今日はこういう時に使えるコードを紹介します。

まずは、有料記事を一つのカテゴリーにまとめます。

そして、有料記事のカテゴリーが5だとします。

そうしたら、以下のコードをfunctions.phpに入れるようにしてください。

// 検索結果から特定のカテゴリを除外するコード
   function mycustom_search_filter_cat_func( $query ) {
       if ( $query->is_search() && $query->is_main_query() && ! $query->is_admin() ) {
           $cat_id = array( '5' );
           $query->set( 'category__not_in', $cat_id );
       }
       return $query;
   }
   add_filter( 'pre_get_posts', 'mycustom_search_filter_cat_func' );

カテゴリーIDが5と15等、二つ以上に分かれてしまう場合は以下のようにいれます。

// 検索結果から特定のカテゴリを除外するコード
   function mycustom_search_filter_cat_func( $query ) {
       if ( $query->is_search() && $query->is_main_query() && ! $query->is_admin() ) {
           $cat_id = array( '5', '15' );
           $query->set( 'category__not_in', $cat_id );
       }
       return $query;
   }
   add_filter( 'pre_get_posts', 'mycustom_search_filter_cat_func' );

コメント

タイトルとURLをコピーしました