2016-02-13 32 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);