按自定义字段对搜索结果进行排序

时间:2015-10-04 作者:Guillermo Carone

我有一个名为“data-base”的自定义帖子类型,它总是需要按一个名为“title\\u stand”的自定义字段进行排序。

我已经成功地对存档数据库进行了适当的排序。然而,我在将相同的排序应用于搜索结果页面时遇到了问题。

有人能告诉我按照自定义字段“title\\u stand”值从A到Z的字母顺序对搜索结果页面进行排序的正确方向吗?

提前感谢!

*****更新*****

根据@PieterGoosen的评论,我成功地做到了这一点:

// Sort search results by standarized title
function my_search_query( $query ) {
    // not an admin page and is the main query
    if ( !is_admin() && $query->is_main_query() ) {
        if ( is_search() ) {
            $args = array(
               \'meta_key\' => \'title_stand\',
               \'orderby\' => \'meta_value\',
               \'order\' => \'ASC\'
            );
            $query->set( \'orderby\', $args );
        }
    }
}
add_action( \'pre_get_posts\', \'my_search_query\' );
这似乎影响了搜索结果的顺序,但不是我所寻找的方式,我似乎找不到新顺序背后的逻辑。。。

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我已经成功地对存档数据库进行了适当的排序。php文件

读了你的问题,我真的觉得你在archive-data-base.php 同样的逻辑也将用于搜索页面。我相信您已经使用了自定义查询来更正排序,这是您永远不应该做的。我不会在这里解释一切,因为我已经在this here.

要更正archive-data-base.php 和搜索页面,您需要使用pre_get_posts 使用自定义字段参数更改主查询

您可以尝试以下方法

add_action( \'pre_get_posts\', function ( $q )
{
    if (    !is_admin() // Target only front end queries
         && $q->is_main_query() // Target the main query only
         && ( $q->is_search() || $q->is_post_type_archive( \'data-base\' ) )
    ) {
        $q->set( \'meta_key\', \'title_stand\' );
        $q->set( \'order\',    \'ASC\'         );
        $q->set( \'orderby\',  \'meta_value\'  );
    }
});

相关推荐

Searching for content post

我需要的“wordpress搜索”引擎只能用于帖子的内容。我在寻找一些解决方案,但“wordpress搜索”引擎总是只按帖子标题显示结果。我可以修改什么,或者应该做什么来解决此问题?谢谢你的帮助!