2011-02-26 113 views
3

在searchresults.php由DESC和ASC訂購搜索結果

當我選擇「價格遞增」的工作,但它的工作,但它的所有屬性加載到頁面上。例如,當我搜索亞利桑那州,然後選擇「價格上升」,從其在亞利桑那州的非訂購屬性中選擇它的加載頁面上的所有屬性,然後按「價格遞增」排序。

感謝

你可以在sedefemlak.com

searchresults.php

    <div id="resultsorder" style=""> 
     <form name="formorder" method="POST" action="<?php bloginfo('url'); ?>/?page_id=<?php echo $wp_searchpageid; ?>"> 
     <select name="resultsorder" onChange="formorder.submit();"> 
         <option>Order</option> 
         <option>Date Descending</option> 
         <option>Date Ascending</option> 
         <option>Price Descending</option> 
         <option>Price Ascending</option> 
         <option>Random</option> 
        </select> 
     </form> 
     </div> 

search_query.php 

  if($resultsorder) { 
    //get value from order dropdown on search results page 
    $resultsorder = $resultsorder; 
    } else { 
    $resultsorder = get_option('wp_searchorder'); 
} 

    switch ($resultsorder) { 
     case "Price Descending": 
      $metakey = 'price_value'; 
      $order = 'DESC'; 
      $orderby = 'meta_value_num'; 
      break; 
     case "Price Ascending": 
      $metakey = 'price_value'; 
      $order = 'ASC'; 
      $orderby = 'meta_value_num'; 
      break; 
     case "Date Descending": 
      $metakey = ''; 
      $order = 'DESC'; 
      $orderby = 'date'; 
      break; 
     case "Date Ascending": 
      $metakey = ''; 
      $order = 'ASC'; 
      $orderby = 'date'; 
      break; 
     case "Random": 
      $metakey = ''; 
      $order = ''; 
      $orderby = 'rand'; 
      break; 
    } 


if (!empty($_ids) && !$alllistings) { 

    $wpq = array ('post_type' => 'listing', 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post__in' => $_ids, 'post_status' => 'publish', 'paged' => $paged, 'posts_per_page' => 9999); 

} elseif (empty($_ids) && !$alllistings) { 

    // $_ids array is empty because search got no results 
    // $_ids array will be empty if page is an "All Listings" page. Don't run this code if is All Listings because All Listings will show all listings. This code will display "no results found" 
    $wpq = array ('post_type' =>'listing', 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post__in' => array('0'),'post_status' => 'publish', 'paged' => $paged, 'posts_per_page' => 9999); 
} elseif ($alllistings) { 
    // This is an All Listings page, so show all results 
    $wpq = array ('post_type' =>'listing', 'paged' => $paged, 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post_status' => 'publish', 'posts_per_page' => 9999); 
} 

$listing = new WP_Query($wpq); 

回答

1

一看直播我明白這一點,您遇到的問題是,當您從搜索結果頁面中選擇一個訂購選項時,訂購工作會有效,但該頁面會顯示所有記錄,而不僅限於原始搜索的結果。

發生這種情況是因爲您的「formorder」表單(在發佈的searchresults.php文件中)在提交時未傳遞任何搜索參數。當用戶從「結果順序」選擇框中選擇一個選項時,將提交「表單順序」表單。但是,該表單僅提交一個數據,排序順序。因此,腳本search_query.php不會收到任何包含有關原始搜索內容的信息的$ _POST或$ _GET數據。這意味着達到了search_query.php中的最後一個「elseif($ alllistings){」子句。換句話說,隨着「結果順序」表單的提交,原始搜索數據將丟失,並且search_query.php中的腳本繼續進行,就好像它有顯示所有列表的請求一樣。

您需要做的是將原始搜索參數作爲隱藏標籤包含在「結果順序」表單中。爲隱藏字段的HTML看起來像這樣:

<input type="hidden" id="searchLocation" name="searchLocation" value="California" /> 

隱藏字段允許在表單提交你將數據傳遞到你的腳本,而無需用戶看到你的頁面上顯示的數據。這可以讓您的「結果順序」表單沿着當前的搜索參數以及所選的排序順序傳遞。這樣,你的腳本在應用排序順序時,也會有數據將其結果限制到最初顯示的結果。

所以裏面的「searchresults.php」你應該有這樣的事情:

<form name="formorder" method="POST" [ETC]> 
    <select name="resultsorder" onChange="formorder.submit();"> 
     [OPTIONS] 
    </select> 
    <input type="hidden" name="location_level1" id="location_level1" 
     value="<?php echo $location_level1; ?>" /> 
    <input type="hidden" name="beds" id="beds" value="<?php echo $beds; ?>" /> 
</form> 

等等,你需要包括所有搜索參數,然而,許多隱藏字段。