PRE_GET_POSTS订单描述未注册

时间:2014-05-13 作者:Howdy_McGee

我创建了一个筛选函数来筛选帖子类型items 根据它的元价值_item_price. 问题是它只按升序工作,我不知道为什么。我的pre_get_posts 函数如下所示:

function frontend_items_filter( $query ) {
    global $page_items_id

    if(!is_page($page_items_id))
        return;

    if($query->query_vars[\'post_type\'] == \'items\' && isset($_GET[\'filter\'])){
        $sort = $_GET[\'item_sort\'];

        // Set Ordering Parameter
        if(isset($_GET[\'item_sort\']) && !empty($_GET[\'item_sort\'])){
            switch($_GET[\'item_sort\']){

                case \'price_lowest\':
                    $query->set(\'meta_key\', \'_item_price\');
                    $query->set(\'orderby\', \'meta_value_num title\');
                    $query->set(\'order\', \'ASC\');
                        break;

                case \'price_highest\':
                    $query->set(\'meta_key\', \'_item_price\');
                    $query->set(\'orderby\', \'meta_value_num title\');
                    $query->set(\'order\', \'DESC\');
                         break;

                default:
                    $query->set(\'orderby\', \'post_date title\');
                    $query->set(\'order\', \'ASC\');
            }
        }
    }
    return $query;
}
add_action( \'pre_get_posts\', \'frontend_items_filter\' );
在我保存价格元之前,我正在验证is_numeric(). 我试图打印出我的查询并将SQL直接运行到PHPmyadmin中,如果我使用下面的SQL并将ASC更改为DESC,那么在PHPmyadmin中,结果不会改变,这很奇怪。

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts
    INNER JOIN wp_term_relationships 
        ON (wp_posts.ID = wp_term_relationships.object_id) 
    INNER JOIN wp_postmeta 
        ON (wp_posts.ID = wp_postmeta.post_id) 
    WHERE 1=1  
    AND ( wp_term_relationships.term_taxonomy_id IN (10) ) 
    AND wp_posts.post_type = \'items\' 
    AND (wp_posts.post_status = \'publish\' 
    OR wp_posts.post_status = \'private\') 
    AND (wp_postmeta.meta_key = \'_item_price\' ) 
    GROUP BY wp_posts.ID 
    ORDER BY wp_postmeta.meta_value+0,wp_posts.post_title ASC LIMIT 0, 10
每次我的结果出来_item_price 升序(从最低价格到最高价格)。问题可能是什么?我还可以检查/验证什么?

Edit 我已经在其他几个字段中尝试过了,结果是一样的——它将显示ASC,但不显示DESC。

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

我不知道为什么,但这和title 在我的订单中,一旦删除,一切都开始正常工作。我会把这个留给任何知道原因的人。

$query->set(\'orderby\', \'meta_value_num title\'); - 不起作用

$query->set(\'orderby\', \'meta_value_num\'); - 作品

结束