我遇到了以下代码的奇怪问题。出于某种原因(超出我的理解),pre_get_posts()似乎没有根据自定义字段对帖子进行排序。什么可能是问题的任何想法?下面是来自functions.php。
的pre_get_post()函数代码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 :(得分:0)
你可以先尝试改变这个
$SortType = 1;
if(isset($_POST["sorttype"])) {
$SortType = $_POST["sorttype"];
}
由此
if(isset($_POST["sorttype"]))
{
$SortType = $_POST["sorttype"];
}
else
{
$SortType=1;
}