Pre_Get_Posts没有根据自定义字段(价格)排序类别帖子

时间:2017-02-26 12:31:03

标签: php html wordpress

我遇到了以下代码的奇怪问题。出于某种原因(超出我的理解),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小时试图解决这个问题,但到目前为止的努力是徒劳的。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你可以先尝试改变这个

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

由此

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