2017-02-26 17 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

相关问题