按自定义元字段在search.php中排序结果
我需要一些关于在search.php中排序结果的帮助 如果我搜索关键字“XYZ”,默认情况下它会返回标题中包含“XYZ”的帖子,这很好 例如,假设我得到以下结果:按自定义元字段在search.php中排序结果,php,search,plugins,wordpress,Php,Search,Plugins,Wordpress,我需要一些关于在search.php中排序结果的帮助 如果我搜索关键字“XYZ”,默认情况下它会返回标题中包含“XYZ”的帖子,这很好 例如,假设我得到以下结果: XYZ1 XYZ2 XYZ3 但是,我想通过一个名为“优先级”的自定义元字段对这3个结果进行排序 因此,上面应该是这样的 XYZ2(优先级为10) XYZ1(具有优先级7) XYZ3(具有优先级4) 我尝试了以下方法: <?php $args = array( 'orderby' => 'meta_va
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);
尝试使用
pre\u get\u posts
函数设置它,它应该会有所帮助我刚刚尝试了另一个代码,但仍然是相同的错误结果。。。代码在上面,请尝试在if中使用query->is\u main\u query()&&&&$query->is\u search()
condition@VaibhavBhanushali,谢谢你解决了我的问题,我已经在我的原始评论中发布了最终代码。很好,这很有帮助,但是最终代码在哪里?