如何在WordPress /创世纪搜索结果页面的页面上优先发布帖子?

时间:2018-06-20 23:00:24

标签: wordpress genesis

如何在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?

先谢谢! 亚当

1 个答案:

答案 0 :(得分:1)

如果您分解其他答案中给出的代码,则可以清楚地看到它在做什么。

  • 在获取任何帖子之前,在pre_get_posts上调用自定义函数。
  • 在函数内部,它确保它是一个search查询,并且不会在其他页面或页面模板上触发。
  • 它将post_types设置为pagepost,从而删除所有自定义帖子类型。
  • 它通过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文件中,您应该会很好。