2014-09-20 99 views
3

我已經搜索了高和低的解決方案,並嘗試了不同的,包括徹底解釋Chip Bennett here一個,但我仍然似乎無法得到它的工作。WordPress的:搜索結果分頁仍然不起作用

結果的第一頁正常工作,但從頁面2它只顯示索引模板,仍然說沒有找到頁面。這裏是我的代碼:

的functions.php

function advanced_search_query($query) { 
    if ($query->is_search) { 
     $query->set('s', $_GET['s']); 
     $query->set('post_type', array('properties')); 
     $query->set('meta_key', $_GET['meta_key']); 
     $query->set('orderby', $_GET['sortby']); 
     $query->set('order', $_GET['order']); 
     $query->set('posts_per_page', '5'); 
     $query->set('paged', $paged); 

     if (isset($_GET['author'])) { 
      $query->set('author', $_GET['author']); 
     } 

     if (isset($_GET['propertytype'])) { 
      $query->set('taxonomy', 'propertytype'); 
      $query->set('terms', $_GET['propertytype']); 
     } 

     $minCost = $_GET['minCost']; 
     $minCost = preg_replace("/[^0-9]/","", $minCost); 
     if ($minCost == ""){ 
      $minCost = "0"; 
     } 

     $maxCost = $_GET['maxCost']; 
     $maxCost = preg_replace("/[^0-9]/","", $maxCost); 
     if ($maxCost == ""){ 
      $maxCost = "99999999999999"; 
     } 

     $query->set('meta_query', array(
      'relation' => 'AND', 
      array(
       'key' => 'ce_location', 
       'value' => $_GET['location'], 
       'compare' => 'LIKE', 
       'type' => 'CHAR' 
      ), 
      array(
       'key' => 'ce_cost', 
       'value' => array($minCost, $maxCost), 
       'compare' => 'BETWEEN', 
       'type' => 'NUMERIC' 
      ), 
      array(
       'key' => 'ce_bedrooms', 
       'value' => array($_GET['minBedrooms'], $_GET['maxBedrooms']), 
       'compare' => 'BETWEEN', 
       'type' => 'NUMERIC' 
      ), 
      array(
       'key' => 'ce_tenancy', 
       'value' => $_GET['tenancy'], 
       'compare' => 'LIKE', 
       'type' => 'CHAR' 
      ) 
     )); 
    }; 
    return $query; 
}; 
add_filter('pre_get_posts', 'advanced_search_query', 1000); 

代碼拉查詢參數

global $query_string; 

$query_args = explode("&", $query_string); 
$search_query = array(); 

foreach($query_args as $key => $string) { 
    $query_split = explode("=", $string); 
    $search_query[$query_split[0]] = urldecode($query_split[1]); 
} 
$search_query['paged'] = get_query_var('paged') ? get_query_var('paged') : 1; 

$search = new WP_Query($search_query); 

循環代碼:

if (have_posts()) : while (have_posts()) : the_post(); 

    //loop content 

endwhile; 
    if(function_exists('wp_simple_pagination')) { wp_simple_pagination(); } ?> 
else : 
    echo 'Sorry, there are currently no property listings available'; 
endif; 

任何建議將非常感激。

編輯:

我也注意到,當我嘗試訪問頁面的URL被修改2

這是第1頁網址:

http://localhost/cunningham/?location=&propertytype=&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key=&tenancy=&s= 

第2頁網址:

http://localhost/cunningham/page/2/?location&propertytype&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key&tenancy&s/ 

回答

3

你在你的主之間有一個衝突查詢和輔助(自定義)查詢。

你正在做的事半錯半錯:-)。讓我們來看看你在做什麼

  1. 代碼的第一部分是改變主查詢的正確方法。實際上,這只是讓事情順利進行而已。你有幾個缺陷這裏雖然

    • pre_get_posts不會改變所有查詢,小學和中學查詢的一致好評。這不僅僅發生在前端,後端也受到影響。您需要將更改應用到前端,並僅針對主查詢

      function advanced_search_query($query) { 
          if (!is_admin() && $query->is_main_query() && $query->is_search()) { 
      
           //REST OF YOUR CODE 
      
    • 你並不需要設置paged參數pre_get_posts。這是由主查詢設置的,不需要修改,所以刪除它。

    • 除此之外,它應該工作得很好。我不能測試你的代碼,因爲我沒有相同的設置你

  2. 你不需要自定義(二級)查詢。您已經修改了主要查詢以處理您的更改

  3. 您的循環就好了。這是您搜索時需要的全部內容。PHP模板,沒有別的

編輯

從意見從OP

我幾乎假設有一個固定鏈接問題的地方。除了基礎知識之外,我的.htaccess中沒有任何內容,並且我的永久鏈接結構爲/%category%/%postname%/,並且該結構分頁在另一個具有正常查詢硬編碼到php文件的頁面上工作良好。這是字面上只是有這個問題,搜索頁面,這一切都因爲分頁沒有被設置的URL

與解決

嗯,我找到了解決辦法。尾部的斜線正在搞亂一切