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小时试图解决这个问题,但迄今为止的努力已经徒劳无功。
任何帮助将不胜感激。
您好机Evrard,并没有真正得到两者之间的区别?如果你能帮助我理解它,会感激吗?还有关于为什么pre_get_post()没有正确排序的任何想法? – Jaswant