2011-02-26 111 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> 

等等,你需要包括所有搜索参数,然而,许多隐藏字段。