首页 > 解决方案 > 如何在 wordpress/genesis 搜索结果页面中将帖子优先于页面?

问题描述

如何在 wordpress/genesis 搜索结果页面中将帖子优先于页面?与此代码类似,除了我希望帖子显示在页面之前,而且我似乎无法完全调整此代码来做到这一点:

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

原始来源:搜索时如何将页面优先于帖子?

提前致谢!亚当

标签: wordpressgenesis

解决方案


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

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

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

从 WP 4.0$query开始接受type作为orderby参数。请注意,这post_type也可以,但默认的非别名值为type.

将顺序更改为,Desc因为您希望在 [PA]ges 之前使用 [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文件中,你应该很高兴。


推荐阅读