You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:15:06