2016-02-13 61 views
2

我需要一些帮助的search.php中的排序结果订单结果witin的search.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'); 
?> 
+1

尝试它使用'pre_get_posts'功能设置,它应该帮助 –

+0

我只是尝试了另一个代码,但还是同样的错误的结果...代码是上述 – user1251762

+1

尝试使用'查询 - > is_main_query()&& $ query-> is_search()'in if条件 –

回答

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);