get_terms - 意想不到的结果

问题描述 投票:0回答:1

我正在创建一个页面,其中包含自定义分类法的术语列表。由于内容较多,所以我把它们分成了几页。

这就是查询代码的样子:

    $mvp_posts_num = 12; //esc_html(get_option('mvp_posts_num'));                           
    $paged = get_query_var('page')? get_query_var('page') : 1 ;
                            
    // WP_Term_Query arguments
    $args = array(
            'taxonomy'  => array( 'city' ),
            'number'    => $mvp_posts_num,
            'offset'    => ((int)$paged - 1) * $mvp_posts_num,
            'hide_empty'=> false,
            'order'     => 'ASC',
            'orderby'   => 'name',
            'meta_query' => array(
                    'relation' => 'AND',
                    array(
                            'key'     => 'country_code',
                            'compare' => 'EXISTS',
                    ),                                  
            ),
        );
        $term_query = get_terms( $args );

这就是第 1 页的结果:

[term_ids] => Array
  717 , 718 , 719 , 720, 721, 722, 723, 724, 725, 726, 727, 728 

相同的查询,但参数 offset=12, number=12 给出以下结果

term_Ids
730, 717, 728, 727, 726, 725, 724, 723, 722, 721, 720, 719

为了控制,我从查询监视器中获取查询并检查 SQL 输出:

For .../page/2 :

*SELECT DISTINCT t.term_id FROM ****_terms AS t INNER JOIN ****_termmeta ON ( t.term_id = ****_termmeta.term_id ) INNER JOIN ****_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('city') AND ( ****_termmeta.meta_key = 'country_code' ) ORDER BY 1 ASC LIMIT 12, 12;*

第/2页的结果(列表ID)必须是这样的:

term_ids    
729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740

比较“纯”SQL 查询给出的结果和通过 get_terms 获得的结果!

不仅顺序不匹配,而且排序顺序也与查询参数不匹配。

在第 3 页及后续页面上,get_terms 查询仍然给出第 1 页中的随机混合术语序列。

我无法解释这种行为。我还检查了所有网站主题和插件代码,没有找到任何影响 get_terms 输出的过滤器。

也许有人遇到过 get_terms 的这种行为并可以告诉我该怎么办?

mysql wordpress
1个回答
0
投票

我将 t.term_order 替换为 1,因为我无法在这里发布问题,因为“源代码太多”

当我分析它时,我意识到有人或某事正在改变查询的顺序。这是“分类和类别顺序”插件。

© www.soinside.com 2019 - 2024. All rights reserved.