web-dev-qa-db-ja.com

検索結果に投稿ページを含めないようにするにはどうすればよいですか。

検索結果のページのみを返すようにしています。

これは働いています:

/?s=term&post_type=post

投稿のみが返され、ページは返されません。

しかし逆はうまくいきません。

/?s=term&post_type=page

これはページと投稿を返しています。

ページだけを返すにはどうすればいいですか?

編集

言及するのを忘れたので、私はユーザーが検索結果ページの上部にある2つのリンクをクリックできるようにしています。

<a href="/?s=term&post_type=post">Search Only Posts</a>
<a href="/?s=term&post_type=page">Search Only Pages</a>

そのため、すべての検索結果をどちらか一方だけに設定することはできません。

1
Corey

pre_get_postsのコールバックごとに投稿タイプを強制することができます。

is_admin() || add_action( 'pre_get_posts', function( \WP_Query $query ) {

    $post_type = filter_input( INPUT_GET, 'post_type', FILTER_SANITIZE_STRING );

    if ( $post_type && $query->is_main_query() && $query->is_search() )
        $query->set( 'post_type', [ $post_type ] );
});

それでも他の投稿タイプが含まれている場合は、そのフックに2番目のコールバックが登録されています。見つけよう。それはテーマやプラグインかもしれません。

2
fuxia