如何在WordPress /创世纪搜索结果页面的页面上优先发布帖子?类似于此代码,除了我希望帖子显示在页面之前,而且我似乎无法完全调整此代码来做到这一点:
function change_search_result_order($query) {
// Check if current page is search page
if ($query->is_search) {
// Specify orderby and order, ordering will be by slug of post_type: pAge > pOst
$query->set('orderby', 'post_type');
$query->set('order', 'ASC');
};
return $query;
}
add_filter('pre_get_posts', 'change_search_result_order');
还提到了此代码块,但是我似乎找不到适合的位置-如果可以的话,它像切换页面和发布一样简单吗?
$query->set('post_type', array('page','post'));
原始来源:How to prioritize pages over posts when searching?
先谢谢! 亚当
答案 0 :(得分:1)
如果您分解其他答案中给出的代码,则可以清楚地看到它在做什么。
pre_get_posts
上调用自定义函数。search
查询,并且不会在其他页面或页面模板上触发。post_types
设置为page
和post
,从而删除所有自定义帖子类型。post_type
在其中添加post_types
,这样,如果您使用另一个添加了CPT或自己添加CPT的插件,则不会将其包括在内(例如活动或工作人员)。
自WP 4.0起,$query
接受type
作为orderby
参数。请注意,post_type
也可以使用,但是默认的非锯齿值为type
。
将顺序更改为Desc
,因为您希望在[PA]之前获得[PO] sts
add_filter( 'pre_get_posts', 'change_search_result_order' );
function change_search_result_order($query){
if( $query->is_search ){
$query->set( 'post_type', array( 'page', 'post' ) );
$query->set( 'orderby', 'type' );
$query->set( 'order', 'DESC' );
};
return $query;
}
将其保留在您的functions.php文件中,您应该会很好。