woocommerce_order_item_product函数过期问题,寻求替代函数的解决方案

本站所有文章均为博主人工写作,绝无AI辅助成分,请放心参阅。

woocommerce_order_item_product这个函数,在很多插件里都用到过,但是这个函数自从WooCommerce 3.0版本就开始过期了,如果你用的插件或者主题里还包含了这个函数,会产生一个这样的报错:“woocommerce_add_order_item_meta is deprecated since version 3.0.0! Use woocommerce_new_order_item instead”

尽管报错信息里提示用woocommerce_new_order_item函数代替,但实际上woocommerce_new_order_item函数的参数和woocommerce_order_item_product并不完全相同,不能靠直接替换函数名称来解决问题。

之所以写这一篇博客,是因为我之前的一篇关于产品自定义字段的博客里有代码遇到了这个报错。这里重新贴一下这段代码:

//6.在订单中保存自定义字段
add_action( 'woocommerce_add_order_item_meta', 'brain1981_product_add_on_order_item_meta', 10, 2 );
function brain1981_product_add_on_order_item_meta( $item_id, $values ) {
	if ( !empty( $values['my_custom_addon'] ) ) {
		wc_add_order_item_meta( $item_id, 'my_custom_addon', $values['my_custom_addon'], true );
	}
}
//from: https://blog.brain1981.com

这里并没有直接用woocommerce_add_order_item_meta这个函数,而是用了同名的钩子,照样遇到了这个报错。而实际上虽然函数已经被废弃,但这个钩子至今仍然是可以运行的,只是在报错日志里会多出来一条本文第一段一样的日志。虽然不影响网站运行,但也指不定哪一天这个钩子也会变得不可用,所以还是得想办法替换掉它。

这个链接包含了解决方法,稍作整理,我们就有了替代的代码:

//6.在订单中保存自定义字段
//from: https://blog.brain1981.com
add_action( 'woocommerce_checkout_create_order_line_item', 'brain1981_checkout_create_order_line_item', 10, 2 );
function brain1981_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
	if ( !empty( $values['my_custom_addon'] ) ) {
		$item->update_meta_data( 'my_custom_addon, $values['my_custom_addon'] );
	}
}

这两个钩子的参数也不完全相同,其中$item更是无法推导出$item_id,因为钩子woocommerce_checkout_create_order_line_item执行的时候,订单对象虽然已经生成,但订单并未进入数据库,因此没有给$item赋予id字段,所以只能用$item->update_meta_data方法在订单对象里直接添加内容,WooCommerce后续会把这些内容写入数据库。所以这两个钩子虽然看上去代码差得不远,但执行的周期是不同的。

总结一下,目前woocommerce_add_order_item_meta函数在WooCommerce 3.0就已废弃,但同名的钩子直到现在WooCommerce 7.1了都还能运行,但会留下报错日志。如果要替换掉它就用woocommerce_checkout_create_order_line_item钩子,并且要用$item->update_meta_data方法替换wc_add_order_item_meta函数。

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/2985.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注