Php Pre_Get_帖子未根据自定义字段(价格)对类别帖子进行排序

Php Pre_Get_帖子未根据自定义字段(价格)对类别帖子进行排序,php,html,wordpress,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_m

我对下面的代码一直有奇怪的问题。出于某种原因(超出我的理解),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

奇怪的是,无论默认sorttype设置为什么,它都只在第一次工作。之后,它似乎只是以某种随机方式排序

他们已经花了超过24小时试图解决这个问题,但迄今为止的努力都是徒劳的


任何帮助都将不胜感激。

您能否先尝试更改此设置

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

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

你能先改变一下吗

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

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

哈啰,埃夫拉德,你不知道这两者的区别吗?如果你能帮我理解,我会很感激的?还有,你知道为什么pre_get_post()排序不正确吗?你好,Evrard,你真的不知道两者之间的区别吗?如果你能帮我理解,我会很感激的?还有,你知道为什么pre_get_post()排序不正确吗?