
本文介绍如何在 WooCommerce 的 woocommerce_thankyou 钩子中,通过 get_categories() 方法的 exclude 参数,精准隐藏特定 ID 的产品分类,避免在订单完成页展示不希望出现的分类。
本文介绍如何在 woocommerce 的 `woocommerce_thankyou` 钩子中,通过 `get_categories()` 方法的 `exclude` 参数,精准隐藏特定 id 的产品分类,避免在订单完成页展示不希望出现的分类。
在 WooCommerce 订单确认页(Thank You 页面)中动态展示所购商品的分类,是提升用户体验和引导二次转化的常见需求。但默认使用 $product->get_categories() 会输出所有关联分类,而实际业务中常需过滤掉某些内部分类(如“测试分类”“批发专用”或“隐藏品类”)。幸运的是,WooCommerce 的 get_categories() 方法底层调用 WordPress 的 WP_Term_Query,原生支持灵活的查询参数——其中 exclude 是实现分类隐藏最直接、高效的方式。
以下为优化后的完整代码示例,已集成错误处理与可维护性设计:
add_action( 'woocommerce_thankyou', 'show_product_category_excluding_specific', 10, 1 );
function show_product_category_excluding_specific( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order || $order->is_empty() ) {
return;
}
// 定义需排除的分类 ID 数组(请根据后台实际 ID 修改)
$excluded_category_ids = array( 42, 87, 156 ); // 示例:隐藏 ID 为 42、87、156 的分类
$items = $order->get_items();
if ( empty( $items ) ) {
return;
}
echo '<div class="order-categories"><h3>您购买的商品分类:</h3><ul>';
foreach ( $items as $item ) {
$product = $item->get_product();
if ( ! $product ) {
continue;
}
// 使用 exclude 参数过滤分类
$categories_html = $product->get_categories( array(
'exclude' => $excluded_category_ids,
'separator' => ' / ', // 可选:自定义分隔符
'before' => '',
'after' => ''
) );
if ( ! empty( $categories_html ) ) {
echo '<li>' . wp_kses_post( $categories_html ) . '</li>';
}
}
echo '</ul></div>';
}✅ 关键说明与注意事项:
- exclude 参数接受整数数组(推荐)或逗号/空格分隔的字符串(如 '10,11,12'),但数组形式更安全、易读且兼容性更好;
- 分类 ID 可在 WordPress 后台「产品 → 分类目录」中,将鼠标悬停于分类名称上,观察浏览器状态栏 URL 中的 tag_ID= 后数字,或使用插件如 Term Management Tools 查看;
- get_categories() 返回的是已格式化的 HTML 字符串(含 标签),不可直接用于 print_r() 或 var_dump() 调试——若需查看原始数据,请改用 $product->get_category_ids() 获取 ID 数组后再过滤;
- 建议将 $excluded_category_ids 提取为配置常量或通过 wp_options 表管理,便于非开发者后期维护;
- 若需按层级排除(如排除某父分类及其所有子分类),则需改用 get_terms() + 自定义递归逻辑,exclude 仅作用于指定 ID 的顶层匹配。
通过以上方式,你无需修改 WooCommerce 核心或额外查询数据库,即可轻量、可靠地实现分类级内容控制,确保 Thank You 页面呈现精准、专业的购物闭环体验。









