如何一次性排除WordPress搜索结果中的Projects文章类型?
排除WordPress搜索结果中的Projects自定义文章类型
你不用再手动列举文章ID来排除,直接通过修改查询参数就能一次性移除所有Projects类型的内容,下面提供两种实用方案:
方案1:白名单模式(指定允许的文章类型)
这种方法直接定义搜索结果只包含你需要的文章类型,比如默认的文章(post)和页面(page),自动排除Projects及其他未指定的类型,代码更简洁:
function ss_search_filter( $query ) { if ( !$query->is_admin && $query->is_search && $query->is_main_query() ) { // 这里列出你想保留的文章类型,不包含'projects'即可 $query->set( 'post_type', array( 'post', 'page' ) ); } } add_action( 'pre_get_posts', 'ss_search_filter' );
如果还有其他需要保留的自定义文章类型,直接加到数组里就行,比如array( 'post', 'page', 'your_other_cpt' )。
方案2:黑名单模式(仅排除指定类型)
如果你的网站有很多自定义文章类型,不想一个个列白名单,用这种方法直接排除Projects类型更高效:
function ss_search_filter( $query ) { if ( !$query->is_admin && $query->is_search && $query->is_main_query() ) { $current_types = $query->get( 'post_type' ); // 默认搜索会包含所有公开文章类型,先获取这些类型 if ( $current_types === 'any' ) { $current_types = get_post_types( array( 'public' => true ) ); } // 如果是数组格式,移除projects类型 if ( is_array( $current_types ) ) { $key = array_search( 'projects', $current_types ); if ( $key !== false ) { unset( $current_types[$key] ); $query->set( 'post_type', array_values( $current_types ) ); } } } } add_action( 'pre_get_posts', 'ss_search_filter' );
注意事项
- 确保你的Projects自定义文章类型的slug是
projects,如果实际slug不同,把代码里的projects替换成对应的名称。 - 代码可以添加到当前主题的
functions.php文件,或者自定义插件中。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

