検索から一部のページを削除


8

私のサイトでは、一部のページを検索フォームで検索できないようにしたいので(www.ex.com/?s=bananaのようなものが表示されても表示されません)

検索結果ページからページを「削除」する方法はありますか(if is_page(id)、display:noneの条件をやみくもにせずに)

回答:


14

WP_Query()あなたは、特定のポストIDのを除外することができます「post__not_in」引数があります。

search.php内に新しいWP_Queryを作成し、現在の$ query_argsを使用してから、 'post__not_in'を追加します。

より動的にする場合は、メタクエリを実行して「exclude」がチェックされているものをすべて除外できる投稿メタを組み込むこともできます。(中に'register_meta_box_cb'を調べるregister_post_type)。

例えば、

add_action('pre_get_posts','wpse67626_exclude_posts_from_search');
function wpse67626_exclude_posts_from_search( $query ){

    if( $query->is_main_query() && is_search() ){
         //Exclude posts by ID
         $post_ids = array(7,19,21);
         $query->set('post__not_in', $post_ids);
    }

}

3
+1。除外する投稿が特定の投稿タイプに属している場合は、検索時にそれらを除外できますregister_post_type
Stephen Harris

1

すべてのページを検索結果から除外する(つまり、手動でページIDを指定する必要がない)ために、@ EricHolmesの関数の改良版を次に示します。

add_action( 'pre_get_posts', 'wpse67626_exclude_pages_from_search' );
function wpse67626_exclude_pages_from_search( $query ) {

    // Manually supply Post/Page IDs to exclude from search results
    // $exclude_page_ids = array( 7, 19, 21 );

    // Or just get all page IDs
    $exclude_page_ids = get_all_page_ids();

    if (
        !$query->is_admin &&
        $query->is_search &&
        $query->is_main_query() &&
        !empty( $exclude_page_ids ) 
    ) {

        $query->set( 'post__not_in', $exclude_page_ids );

    }
}

より詳しい情報:

(代替)あなたが何をしているのかを考えるexclude_from_searchと、page投稿タイプをに設定することができますがtrue、これは検索から投稿タイプを除外するための最良の方法のようです。@prettyboympの回答を参照してください。

より詳しい情報:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.