WP_Term_Query offset参数失效:设置后仍返回全部产品分类求助
WP_Term_Query 设置 offset 无效的原因及解决方法
WP_Term_Query 本身不支持 offset 参数,你在 args 里设置这个参数会被完全忽略,这就是为什么不管设多少值都返回所有分类的核心原因——这个类的参数列表里根本没有 offset 这一项。
解决方法一:用 get_terms + array_slice 实现偏移
先获取所有符合条件的分类,再用 PHP 的 array_slice 函数截取偏移后的部分,简单直接:
$args = array( 'taxonomy' => 'product_cat', 'order' => 'ASC', 'orderby' => 'parent', 'hide_empty' => false, // 用布尔值替代字符串"0",代码更规范 'parent' => 0, // 用整数替代字符串"0",避免类型转换问题 ); $all_terms = get_terms($args); // 偏移3个,从第4个分类开始获取 $offset_terms = array_slice($all_terms, 3);
解决方法二:用 WP_Query 间接实现(适合分页场景)
如果需要配合分页逻辑,可以通过查询关联的产品来间接获取分类,再做去重和偏移处理:
$args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'parent', 'terms' => 0, ), ), ); $query = new WP_Query($args); $terms = array(); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $product_terms = get_the_terms(get_the_ID(), 'product_cat'); if ($product_terms) { foreach ($product_terms as $term) { if ($term->parent == 0) { $terms[$term->term_id] = $term; // 去重 } } } } wp_reset_postdata(); } // 转换为索引数组后执行偏移 $offset_terms = array_slice(array_values($terms), 3);
另外补充:你的 hide_empty 和 parent 参数用了字符串"0",虽然 WordPress 会自动转换类型,但建议直接用布尔值 false 或整数 0,代码更规范也能避免潜在的类型兼容问题。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

