使用GET方法按元值对帖子进行排序

时间:2016-12-08 作者:Bidin

我用高级自定义字段添加的元值自定义帖子类型。我想按此meta和post\\u日期使用get方法对帖子进行排序。

我编写了一些代码,但它的工作方式很奇怪——它并没有增加按meta对帖子进行排序的机会,只是生成了任何按meta排序的“orderby”。所以,当我在浏览器中编写类似www.mysite的内容时。com/存档/?orderby=post\\u date它仍然只按meta排序。

function my_pre_get_posts( $query ) {

    // do not modify queries in the admin
    if( is_admin() ) {

        return $query;

    }


    // only modify queries for \'text\' post type
    if( isset($query->query_vars[\'post_type\']) && $query->query_vars[\'post_type\'] == \'text\' ) {

        // allow the url to alter the query
        if( isset($_GET[\'orderby\']) ) {

            $query->set(\'orderby\',  \'meta_value_num\');  
            $query->set(\'meta_key\', \'text_date\');
            $query->set(\'order\', \'DESC\'); 


        } 

    }

    // return
    return $query;

}
add_action(\'pre_get_posts\', \'my_pre_get_posts\');

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

您实际上没有使用$_GET[\'orderby\']-任何地方都有价值。您在代码中所做的是按text_date-元值,始终。如果您想在默认情况下按日期订购,以及何时订购$_GET[\'orderby\'] 设置为默认orderby值,或者如果$_GET[\'orderby_meta\'] 如果设置了,则按顺序执行,您需要执行以下操作:

if (isset($_GET[\'orderby\']){
    $query->set(\'orderby\', sanitize_key($_GET[\'orderby\']);  
    $query->set(\'order\', \'DESC\'); 
} else if (isset($_GET[\'orderby_meta\']){
    $query->set(\'orderby\',  \'meta_value_num\');  
    $query->set(\'meta_key\', \'text_date\');
    $query->set(\'order\', \'DESC\'); 
}

相关推荐

如何在WooCommerce_Account_Orders函数中传递$CURRENT_PAGE?

woocommerce功能woocommerce_account_orders($current_page) 已调用1个参数$current_page. 该函数通过调用woocommerce_account_orders_endpoint 通过以下挂钩-add_action( \'woocommerce_account_orders_endpoint\', \'woocommerce_account_orders\' );然而,在上述挂钩中,$current_page 未在函数中作为参数传递。情况如何$c