我有一个名为“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\' );
这似乎影响了搜索结果的顺序,但不是我所寻找的方式,我似乎找不到新顺序背后的逻辑。。。
最合适的回答,由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\' );
}
});