在我的网站上,我希望一些页面不能通过搜索表单进行查询(这样当我有类似www.ex.com/?s=banana的内容时,它们就不会出现)
有没有一种方法可以从搜索结果页面中“删除”页面(而不是盲目地执行if Is\\u page(id),display:none的条件)
在我的网站上,我希望一些页面不能通过搜索表单进行查询(这样当我有类似www.ex.com/?s=banana的内容时,它们就不会出现)
有没有一种方法可以从搜索结果页面中“删除”页面(而不是盲目地执行if Is\\u page(id),display:none的条件)
在里面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);
}
}
要从搜索结果中排除所有页面(即,无需手动提供页面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\'s answer for that.更多信息:
当参数“s”没有值时,它会自动重定向到主页。相反,我希望显示来自自定义sql查询的所有信息。我该怎么做??