首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只为一个查询设置pre_get_posts?

如何只为一个查询设置pre_get_posts?
EN

Stack Overflow用户
提问于 2018-07-29 03:49:33
回答 1查看 64关注 0票数 0

我想在archive.php中使用排序

所以用function.php编写这段代码

代码语言:javascript
复制
function change_order_for_links( $query ) {
    if ( is_archive() || is_search() ) {
        $query->set( 'meta_key', 'pin_archive' );
        $query->set( 'orderby', 'meta_value_num' );
        $query->set( 'order', 'DEC' );
    }
}
function change_order_for_links_rate( $query ) {
    if ( is_main_query() && ( is_archive() || is_search() )) {
        $query->set( 'meta_key', '_wpcr_rating_stars_avg' );
        $query->set( 'orderby', 'meta_value_num' );
        $query->set( 'order', 'DEC' );
    }
}
function change_order_for_links_view( $query ) {
    if ( is_main_query() && ( is_archive() || is_search() )) {
        $query->set( 'meta_key', 'views' );
        $query->set( 'orderby', 'meta_value_num' );
        $query->set( 'order', 'DEC' );
    }
}
function set_ordering() {
    if ( isset( $_GET['order'] ) ) {
        $order = $_GET['order'];
        if ( $order == 'view' ) {
            add_action( 'pre_get_posts', 'change_order_for_links_view' );
        } elseif ( $order == 'rate' ) {
            add_action( 'pre_get_posts', 'change_order_for_links_rate' );
        }
    } else {
        add_action( 'pre_get_posts', 'change_order_for_links' );
    }
}
add_action( 'pre_get_posts', 'set_ordering' );

但此设置适用于存档页面中的所有查询

所有查询的is_main_query()值均为true

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51574725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档