我一直在寻找一种方法来调整我的wordpress搜索结果。
这就是我想要的:
在我的网站上,我有帖子,页面和自定义帖子类型。现在,在其他页面的子页面中存在某些页面。例如,假设有一个名为 Services
的父页面,其下有 5 个子页面名为 ABC Service
、XYZ Service
等。
现在我只想在wordpress搜索结果中返回以下内容:
-
所有帖子
页面 (不是服务页面及其下的任何子页面)。因此,除了
Services
页面和所有将父页面设置为Services
的5个子页面外,所有页面都将显示在搜索中。其他自定义帖子类型
这是我所做的:
首先,我创建了一个小函数来检查子页面:
function ism_is_subpage() {
$post = get_post();
if ( is_page() && $post->post_parent ) {
return $post->post_parent;
} else {
return false;
}
}
在此之后,我创建了一个 WordPress pre_get_posts
过滤器调用来传递它。喜欢这个:
add_filter('pre_get_posts', function( $query ) {
if (!$query->is_admin && $query->is_search) {
$query->set('post_type', array('post', 'page', 'other-post-type1'));
}
return $query;
});
但问题是,无论我如何称呼ism_is_subpage()
,我都没有得到我想要的结果。
你们中有人可以帮忙吗?
如果你知道页面ID,你可以做这样的事情:
add_filter('pre_get_posts', function( $query ) {
if (!$query->is_admin && $query->is_search) {
$query->set('post_type', array('post', 'page', 'other-post-type1')); //this line to specify post types as it is already in your question
$query->set('post_parent__not_in', array($post_id));
$query->set('post__not_in', array($post_id));
}
return $query;
});
检查帖子和页面参数,并记住pre_get_posts钩子是在创建查询变量对象之后但在运行实际查询之前调用的。
编辑
问题中的第一$query->set(.....)
行会进行帖子类型过滤,您必须添加要搜索的所有帖子类型,并且不要忘记默认的帖子类型,例如"nav_menu_item"等。您必须输入帖子 ID(父页面的 ID),例如 44。