You need to enable JavaScript to run this app. 触发Deprecated警告的WooCommerce旧代码可运行,更新后却返回空值?
优惠活动
大模型
产品
解决方案
定价
更多

触发Deprecated警告的WooCommerce旧代码可运行,更新后却返回空值?

WooCommerce弃用方法相关问题解答

你目前在自定义函数里用到的旧代码为:

$get_product_id = wc_get_product(get_the_ID());
$get_title = $get_product_id->get_name();
$get_cat = $get_product_id->get_categories(); // 旧方法
$get_tag = $get_product_id->get_tags(); // 旧方法
$output = '';

当前能正常运行,但debug日志持续输出如下弃用警告:

PHP Deprecated: WC_Product::get_categories is deprecated since version 3.0! Use wc_get_product_category_list instead.
PHP Deprecated: WC_Product::get_tags is deprecated since version 3.0! Use wc_get_product_tag_list instead.

针对你提出的两个问题,解答如下:

一、能否忽略这类运行正常的弃用类debug错误?

  • 不建议长期忽略。这类错误不是普通的语法提示,是WooCommerce官方明确标注「将在后续正式版本中彻底移除」的旧接口:
    • 现在能正常运行只是因为当前版本还保留了兼容层,等下次大版本更新,旧方法会直接从代码库删除,到时候你的自定义代码会直接触发致命错误,导致前端页面白屏,根本不是弹个debug提示这么简单
    • 部分知名插件偶发这类错误,大多是开发团队为了兼容老版本WooCommerce做的过渡兼容写法,还没完成全量替换,不代表这种写法是安全的,你自己写的自定义代码完全可控,没必要留这个版本升级的隐患
    • 如果长期开启debug模式,大量的弃用警告会持续刷写服务器日志,严重时会占满磁盘空间,甚至影响站点运行性能
  • 如果只是临时调试测试,短期可以先屏蔽,但上线前必须替换完所有旧的弃用方法

二、为什么用官方推荐的新方法会返回空?以及正确的修改代码方案

之前换官方方法拿不到数据的核心原因

你原来的变量命名有误导性:代码里$get_product_id = wc_get_product(get_the_ID()),这个变量实际存的是WC_Product类的实例对象,不是数字形式的产品ID。
而wc_get_product_category_list()、wc_get_product_tag_list()这两个官方函数,第一个参数必须传数字形式的产品/文章ID,你传了一个对象进去,函数拿不到有效的查询条件,自然返回空值。

分场景的正确修改方案

根据你原来代码的使用习惯,分两种常见场景改:

场景1:需要获取分类/标签的数组(和旧方法返回值完全对齐,方便后续循环、二次处理)

旧的get_categories()、get_tags()实际返回的是绑定在产品上的分类/标签对象数组,直接用WordPress原生的wp_get_post_terms获取即可,不会触发任何弃用警告:

$product_id = get_the_ID(); // 直接取当前循环的文章ID,不用先实例化产品对象再拿ID
$get_product = wc_get_product($product_id);
$get_title = $get_product->get_name();

// 替代旧的 ->get_categories(),返回分类对象数组
$get_cat = wp_get_post_terms( $product_id, 'product_cat' );
// 替代旧的 ->get_tags(),返回标签对象数组
$get_tag = wp_get_post_terms( $product_id, 'product_tag' );

// 加兜底判断,避免产品没设置分类/标签时返回WP_Error对象导致后续代码报错
if ( is_wp_error( $get_cat ) ) {
    $get_cat = [];
}
if ( is_wp_error( $get_tag ) ) {
    $get_tag = [];
}

场景2:需要直接输出带链接的分类/标签字符串(对应官方两个函数的设计用途)

如果你的需求就是把分类/标签拼成带链接的字符串直接展示在前端,用官方函数就可以,注意第一个参数要传数字形式的产品ID:

$product_id = get_the_ID();
// 参数说明:产品ID、列表项分隔符、列表前的包裹标签、列表后的包裹标签
$get_cat = wc_get_product_category_list( $product_id, ', ', '<span class="product-cat">', '</span>' );
$get_tag = wc_get_product_tag_list( $product_id, ', ', '<span class="product-tag">', '</span>' );

内容的提问来源于stack exchange,提问作者LionHeart-Nerd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 22:54:02