2016-03-28 181 views
0

我真的需要幫助。以下是我的wp頁面模板的代碼,用於搜索結果search.php,一切正常。現在,該網站是關於公共事件的,所以搜索結果按事件日期顯示是非常重要的。我創建了一個名爲「date」的自定義字段,我希望通過「date」字段值顯示結果。按meta_key排序搜索結果

我花了整整一週的時間找到解決方案,但不幸的是我不能。請幫我:)

下面是一個代碼:

<?php 
    global $query_string; 
    $query_args = explode("&", $query_string); 
    $search_query = array(); 
    if(strlen($query_string) > 0) { 
     foreach($query_args as $key => $string) { 
      $query_split = explode("=", $string); 
      $search_query[$query_split[0]] = urldecode($query_split[1]); 
     } 
    } 
    $search = new WP_Query($search_query); 
?> 

<?php if ($search->have_posts()) : while ($search->have_posts()) : $search->the_post(); ?> 

    <!-- loop goes here --> 

<?php endwhile; else: ?> 

<?php endif; ?> 

謝謝!!!!

+2

請發佈'$ search_query'數組。 – Noman

+0

是一個自定義帖子類型?或者你想搜索整個網站? – Mark

+0

@Mark我想搜索整個網站。 – Devades

回答

0

我想嘗試別的東西:

在你functions.phpmy-plugin.php

add_filter('pre_get_posts', 'customize_search_page'); 

function customize_search_page($query){ 

    if(!is_admin() && $query->is_search && $query->is_main_query()){ 
     $query->query_vars['meta_key'] = 'your_meta_key'; 
     $query->query_vars['orderby'] = 'meta_value'; 
     $query->query_vars['order'] = 'DESC'; 
    } 
    return $query; 
} 

我沒有測試它,但pre_get_posts過濾器將在循環之前被調用。如果這是正確的查詢(搜索和主)我改變了orderby到一個元值的順序。

+0

非常感謝您的回答,但不幸的是它不起作用。 – Devades

+0

爲什麼不呢?這應該在http://yoursite.com/s=test上使用標準的'if(have_posts()){while(have_posts()){the_post();/*循環在這裏* /}}'模板。 –

+0

對不起,它的工作原理。我之前沒有注意到你的代碼中有一個額外的'>'。所以,行:'$ query-> query_vars ['meta_key'] =>'your_meta_key';' 應該是:'$ query-> query_vars ['meta_key'] ='your_meta_key';' 謝謝非常!!!! – Devades