通过自定义元字段搜索.php排序结果


Order results witin search.php by custom meta field

我需要一些关于在搜索结果中排序的帮助.php

如果我搜索关键字"XYZ"

,默认情况下它会返回标题中包含"XYZ"的帖子,这很棒。

例如,假设我得到以下结果:
XYZ1
XYZ2
XYZ3

但是,我想按名为"优先级"的自定义元字段对这 3 个结果进行排序

所以上面应该是这样的
XYZ2(优先级为 10)
XYZ1(优先级为 7)
XYZ3 (优先级为 4)

我尝试了以下方法:

<?php
    $args = array(
    'orderby'   => 'meta_value_num',
    'meta_key'  => 'priority',
    'order'     => 'DESC'
);
query_posts($args);
while ( have_posts() ) : the_post();
    // Results
endwhile;
?>

但我得到的回报是按优先级排序的不相关的帖子,例如
XYZ2(优先级为 10)
ABC3(优先级为 9)
BBA4(优先级为 8)
XYZ1(优先级为 7)
...等等

不确定我是否错过了什么。


我也试过这个:

<?php
function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
        $query->set('meta_key', 'priority' );
        $query->set('orderby', 'meta_value_num' );
        $query->set('order', 'DESC' );
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');
?>

这是对我有用的最终代码片段。

<?php
function SearchFilter($query) {
    if ($query->is_main_query() && $query->is_search()) {
        $query->set('post_type', 'post');
        $query->set('showposts', -1);
        $query->set('meta_key', 'priority' );
        $query->set('orderby', 'meta_value_num' );
        $query->set('order', 'DESC' );
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');
?>

下面的片段怎么样?

    if (get_query_var('paged'))
      $paged = get_query_var('paged');
    elseif (get_query_var('page'))
      $paged = get_query_var('page');
    else
      $paged = 1;
    $s = get_query_var('s');
    $args = array(
        'orderby' => 'meta_value_num',
        'meta_key' => 'priority',
        'order' => 'DESC',
        'paged' => $paged,
        's' => $s,
        'post_type' => array('post'),
    );
    query_posts($args);