Remove some pages from search

时间:2012-10-09 作者:Fredy31

在我的网站上,我希望一些页面不能通过搜索表单进行查询(这样当我有类似www.ex.com/?s=banana的内容时,它们就不会出现)

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

2 个回复
最合适的回答,由SO网友:Eric Holmes 整理而成

在里面WP_Query() 有一个“post\\uu not\\u in”参数,您可以在其中排除特定的post ID。

您将在搜索中创建一个新的WP\\u查询。php并使用当前的$query\\u参数,然后添加“post\\uu not\\u in”。

如果您想使其更具动态性,还可以构建一些post-meta,在其中可以执行元查询并排除所有选中“exclude”的内容。(在中查找“register\\u meta\\u box\\u 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);
    }

}

SO网友:its_me

要从搜索结果中排除所有页面(即,无需手动提供页面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 );

    }
}
更多信息:

(ALTERNATIVE) 虽然,考虑到你正在做的事情,你可以exclude_from_search 对于page 发布类型至true, 在我看来,这似乎是从搜索中排除帖子类型的最佳方式。看见@prettyboymp\'s answer for that.

更多信息:

结束

相关推荐

Need to do blank search.

当参数“s”没有值时,它会自动重定向到主页。相反,我希望显示来自自定义sql查询的所有信息。我该怎么做??