我有一个自定义帖子类型,我用于使用uncode主题构建的页面上的某些文本块。我需要将这些块公开,以便它们显示在页面上,但我想阻止它们出现在搜索结果中。
search.php不像普通的wordpress搜索文件,它是uncode-theme文件,并且没有正常的查询,我不这么认为,所以我在思考我可能需要一个功能吗?
任何人都可以建议如何实现这个目标吗?
CPT是' staticcontent'
谢谢!
答案 0 :(得分:4)
我认为接受的答案是正确的。 exclude_from_search
会阻止所有$query = new WP_Query
返回结果。
核心说:
...检索任何类型的除了修订版和类型 ' exclude_from_search'设为TRUE)
这是一个常见问题,与前端搜索结果页 v.s.混淆搜索数据库中的帖子。
在前端使用自定义查询展示内容,需要exclude_from_search = false
或使用其他方法并直接通过ID获取内容。
您需要过滤搜索前端机制。这是 true 从搜索中排除帖子类型,无需手动重新构建"已知"类型:
function entex_fn_remove_post_type_from_search_results($query){
/* check is front end main loop content */
if(is_admin() || !$query->is_main_query()) return;
/* check is search result query */
if($query->is_search()){
$post_type_to_remove = 'staticcontent';
/* get all searchable post types */
$searchable_post_types = get_post_types(array('exclude_from_search' => false));
/* make sure you got the proper results, and that your post type is in the results */
if(is_array($searchable_post_types) && in_array($post_type_to_remove, $searchable_post_types)){
/* remove the post type from the array */
unset( $searchable_post_types[ $post_type_to_remove ] );
/* set the query to the remaining searchable post types */
$query->set('post_type', $searchable_post_types);
}
}
}
add_action('pre_get_posts', 'entex_fn_remove_post_type_from_search_results');
可以更改评论$post_type_to_remove = 'staticcontent';
以适应任何其他帖子类型。
请发表评论如果我在这里遗漏了某些内容,我无法找到另一种方法来阻止此类帖子类型的情况,按查询显示内容但隐藏搜索/直接访问给前端用户。
答案 1 :(得分:2)
这里的答案取决于您是通过自己的代码创建CPT,还是其他插件正在创建CPT。有关这两种方法的详细解释,请参阅此链接:
http://www.webtipblog.com/exclude-custom-post-type-search-wordpress/
基本要点是:
如果您要创建自己的CPT,可以在'exclude_from_search' => true
如果另一个插件/主题正在创建CPT,您需要稍后设置此exclude_from_search变量,作为CPT过滤器的一部分,如下:
// functions.php
add_action( 'init', 'update_my_custom_type', 99 );
function update_my_custom_type() {
global $wp_post_types;
if ( post_type_exists( 'staticcontent' ) ) {
// exclude from search results
$wp_post_types['staticcontent']->exclude_from_search = true;
}
}
答案 2 :(得分:1)
首先,Jonas Lundman 的答案是正确的,应该是公认的答案。
exclude_from_search
参数工作不正常 - 它也从其他查询中排除了帖子类型。
WP 问题跟踪系统上有一张票,但他们已将其关闭为 wontfix,因为他们无法在不破坏向后兼容性的情况下解决此问题。有关详细信息,请参阅 this ticket 和 this one。
我在 Jonas Lundman 提出的解决方案中添加了额外的检查,因为:
post_type
可能会导致意外结果。add_action('pre_get_posts', 'remove_my_cpt_from_search_results');
function remove_my_cpt_from_search_results($query) {
if (is_admin() || !$query->is_main_query() || !$query->is_search()) {
return $query;
}
// can exclude multiple post types, for ex. array('staticcontent', 'cpt2', 'cpt3')
$post_types_to_exclude = array('staticcontent');
if ($query->get('post_type')) {
$query_post_types = $query->get('post_type');
if (is_string($query_post_types)) {
$query_post_types = explode(',', $query_post_types);
}
} else {
$query_post_types = get_post_types(array('exclude_from_search' => false));
}
if (sizeof(array_intersect($query_post_types, $post_types_to_exclude))) {
$query->set('post_type', array_diff($query_post_types, $post_types_to_exclude));
}
return $query;
}