2017-02-26 52 views
1

我一直有奇怪的問題,下面的代碼。出於某種原因(超出我的理解),pre_get_posts()似乎不是基於自定義字段對帖子進行排序。任何想法可能是什麼問題?下面是我的函數function.php中的pre_get_post()函數代碼。Pre_Get_Posts不根據自定義字段排序類別帖子(價格)

function alter_main_query($query) { 
    if (is_admin()){ 
     return; 
    } 
    if ($query->is_category() && $query->is_main_query()) { 
     $SortType = 1; 
     if(isset($_POST["sorttype"])) { 
      $SortType = $_POST["sorttype"]; 
     } 

     //default sorting is by availability in no of stores 
     if ($SortType == 0) { 
      $meta_query = array(
       array(
        'key' => 'Lowest', 
        'value' => 0, 
        'compare' => '>' 
       ) 
      );   
      $query->set('meta_query', $meta_query);    
      $query->set('meta_key', 'NoOfStoresAvailable'); 
      $query->set('orderby', 'meta_value_num'); 
      $query->set('order', 'DESC'); 

     } else if ($SortType == 1) { 

      $meta_query = array( 
       array(
        'key' => 'Lowest', 
        'value' => 0, 
        'compare' => '>' 
       ) 
      ); 

      $query->set('meta_query', $meta_query); 
      $query->set('orderby', 'meta_value_num'); 
      $query->set('meta_key', 'Lowest');    
      $query->set('order', 'DESC'); 

     } else if ($SortType == 2) { 
      $meta_query = array( 
       array(
        'key' => 'Lowest', 
        'value' => 0, 
        'compare' => '>' 
       ) 
      ); 

      $query->set('meta_query', $meta_query); 
      $query->set('orderby', 'meta_value_num'); 
      $query->set('meta_key', 'Lowest');    
      $query->set('order', 'ASC'); 

     } else if ($SortType == 3) { 
      $meta_query = array(
       array(
        'key' => 'Lowest', 
        'value' => 0, 
        'compare' => '>' 
       ) 
      ); 
      $query->set('meta_key', 'AvgRatings'); 
      $query->set('orderby', 'meta_value_num'); 
      $query->set('order', 'DESC');   
     } 

    } 
    return $query; 

} 

注:我有一個允許用戶選擇他/她希望(1 =價格前高後低,2 =價格從低到高,3 =平均排序什麼網站上的下拉評級),並使用post方法將選定的排序值傳遞給表單。如果沒有值傳遞,它將在上述函數中默認爲sorttype = 0。

而奇怪的是,它只在第一次爲任何默認排序類型設置。之後,它似乎以某種隨機的方式排序。

已經花了超過24小時試圖解決這個問題,但迄今爲止的努力已經徒勞無功。

任何幫助將不勝感激。

回答

0

可以先嚐試改變這種

$SortType = 1; 
if(isset($_POST["sorttype"])) { 
    $SortType = $_POST["sorttype"]; 
} 

if(isset($_POST["sorttype"])) 
    { 
    $SortType = $_POST["sorttype"]; 
    } 
else 
    { 
    $SortType=1; 
    } 
+0

您好機Evrard,並沒有真正得到兩者之間的區別?如果你能幫助我理解它,會感激嗎?還有關於爲什麼pre_get_post()沒有正確排序的任何想法? – Jaswant

相關問題