从搜索中删除一些页面


8

在我的网站上,我希望搜索表单不能查询某些页面(因此当我有类似www.ex.com/?s=banana之类的内容时,它们不会出现)

有没有一种方法可以从搜索结果页面“删除”页面(而不只是盲目地执行if is_page(id),display:none的条件)

Answers:


14

WP_Query()中,有一个'post__not_in'参数,您可以在其中排除特定的帖子ID。

您将在search.php内创建一个新的WP_Query并使用当前的$ query_args,然后添加“ post__not_in”。

如果您想使其更具动态性,则还可以构建一些后期元,在其中可以进行元查询并排除所有选中“排除”的内容。(在register_post_type中查找'register_meta_box_cb' )。

例如,

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_searchpage帖子类型设置为true,对我来说,这似乎是从搜索中排除帖子类型的最佳方法。参见@prettyboymp的答案

更多信息:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.