我需要一些帮助来在search.php中订购结果
如果我搜索关键字" XYZ",默认情况下会返回包含" XYZ"的帖子。在标题内,这很棒。
举个例子,假设我得到以下结果:
XYZ1
XYZ2
XYZ3
但是,我想通过名为" priority"
的自定义元字段对这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');
?>
答案 0 :(得分:0)
以下片段怎么样?
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);