아래 코드에 이상한 문제가 있습니다. 어떤 이유로 (내 이해를 넘어) 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 시간 이상을 소비했지만 지금까지의 노력은 쓸모 없습니다.
도움이 될 것입니다.
안녕하세요 에브라에 의해
, 정말 둘 사이의 차이를하지 않았다 변경하려고 할 수 있습니까? 네가 나를 이해하도록 도와 주시면 감사하겠습니다. 또한 pre_get_post()가 제대로 정렬되지 않는 이유에 대한 아이디어가 있습니까? – Jaswant