如何在 wordpress/genesis 搜索结果页面中优先考虑帖子而不是页面?

How do I prioritize posts over pages in a wordpress/genesis search result page?

如何在 wordpress/genesis 搜索结果页面中优先于页面 post?与此代码类似,除了我希望 posts 在页面之前显示并且我似乎无法完全调整此代码来执行此操作:

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');

也提到了这个代码块,但我似乎找不到合适的地方——如果可以的话,是不是就像切换页面和post一样简单?

$query->set('post_type', array('page','post'));

原始出处:

提前致谢! 亚当

如果你分解另一个答案中给出的代码,你可以清楚地看到它在做什么。

  • pre_get_posts 上调用了自定义函数,这是在获取任何 post 之前。
  • 在函数内部,它确保它是一个 search 查询,并且不会在其他页面或页面模板上触发。
  • 它将 post_types 设置为 pagepost,从而删除任何自定义 post 类型。
  • 它将 post 的顺序更改为按 post_type
  • 的名称排序
  • 它将 post 的顺序更改为升序或降序。

在其中添加 post_types,这样一来,如果您使用另一个添加 CPT 的插件或添加您自己的插件,它们将不会被包括在内(例如活动或工作人员)。

自 WP 4.0 起,$query 接受 type 作为 orderby 参数。请注意 post_type 也适用,但默认的非别名值为 type.

将顺序更改为 Desc,因为您希望 [PO]sts 在 [PA]ges

之前
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 文件中,您应该可以开始了。