Answers:
在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);
}
}
要从搜索结果中排除所有页面(即无需手动提供页面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的答案。
更多信息:
register_post_type