2017-02-26 1 views
1

아래 코드에 이상한 문제가 있습니다. 어떤 이유로 (내 이해를 넘어) pre_get_posts() 그냥 사용자 정의 필드를 기반으로 게시물을 정렬하는 것 같지 않습니다. 문제가 될 수있는 것에 대한 아이디어가 있습니까? 아래는 functions.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이 기본값이됩니다.

이상한 점은 기본 sorttype이 설정된 모든 항목에 대해서만 처음 작동한다는 것입니다. 그 후에 그것은 임의의 방식으로 정렬되는 것처럼 보입니다.

이미이 문제를 해결하기 위해 24 시간 이상을 소비했지만 지금까지의 노력은 쓸모 없습니다.

도움이 될 것입니다.

답변

0

먼저는이

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

안녕하세요 에브라에 의해

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

, 정말 둘 사이의 차이를하지 않았다 변경하려고 할 수 있습니까? 네가 나를 이해하도록 도와 주시면 감사하겠습니다. 또한 pre_get_post()가 제대로 정렬되지 않는 이유에 대한 아이디어가 있습니까? – Jaswant

관련 문제