Woocommerce:哪个钩子可以替换已弃用的“woocommerce_add_order_item_meta”
需要添加自定义元来订购项目。谷歌搜索它,大多数文章说使用“woocommerce_add_order_item_meta”钩子。此挂接在最新版本 2.3.7 中已弃用。有人,请告诉我使用哪个钩子代替。
http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html
需要添加自定义元来订购项目。谷歌搜索它,大多数文章说使用“woocommerce_add_order_item_meta”钩子。此挂接在最新版本 2.3.7 中已弃用。有人,请告诉我使用哪个钩子代替。
http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html
2017/2018 THE RIGHT WAY (使用新的CRUD setters和Getters方法)
由于woocommerce 3已经改进了许多事情,因此即使在woocommerce版本3.3 +中,action hook仍然可以完美地工作。woocommerce_add_order_item_meta
此挂钩由结帐过程中的类方法和相关函数启用,而不是在购物车数据不再可用的类中启用。WC_Checkout
WC_Order
现在,随着Woocommmerce 3引入了新的CRUD setters和getters方法,要使用的类似替换钩子
是woocommerce_checkout_create_order_line_item
,它具有与购物车数据类似的有用参数。
woocommerce_new_order_item
确实不方便,因为购物车数据无法访问。
让我们看看如何使用woocommerce_checkout_create_order_line_item
。它有 4 个可用参数:
$item
是新引入的类的一个实例WC_Order_Item_Product
$cart_item_key
是购物车项目的唯一哈希键$values
是购物车商品$order
WC_Order对象的实例(在某些特定情况下,这是一个非常有用的附加参数)
在这个钩子中,我们将用新的update_meta_data()方法替换旧的工作函数wc_add_order_item_meta()
与参数一起使用。WC_Data
$item
例:
## --- New way --- ##
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
// Get a product custom field value
$custom_field_value = get_post_meta( $item->get_product_id(), '_meta_key', true );
// Update order item meta
if ( ! empty( $custom_field_value ) ){
$item->update_meta_data( 'meta_key1', $custom_field_value );
}
// … … Or … …
// Get cart item custom data and update order item meta
if( isset( $values['custom_data'] ) ) {
$item->update_meta_data( 'meta_key2', $values['custom_data'] );
}
}
最后,我们可以使用钩子的旧方法做同样的事情,因为它具有几乎相同的有用参数:woocommerce_add_order_item_meta
## --- Old way --- ##
add_action( 'woocommerce_add_order_item_meta', 'custom_add_order_item_meta', 20, 3 );
function custom_add_order_item_meta( $item_id, $values, $cart_item_key ) {
// Get a product custom field value
$custom_field_value = get_post_meta( $values['data']->get_id(), '_meta_key', true );
// Update order item meta
if ( ! empty( $custom_field_value ) ){
wc_add_order_item_meta( $item_id, 'meta_key1', $custom_field_value );
}
// … … Or … …
// Get cart item custom data and update order item meta
if( isset( $values['custom_data'] ) ) {
wc_add_order_item_meta( $item_id, 'meta_key2', $values['custom_data'] );
}
}
结论:是正确的替代钩子,用于WooCommerce 3 +和新的CRUD设置器和getters方法。
woocommerce_checkout_create_order_line_item
如果你看一下,你会看到wc-deprecated-functions.php
/**
* @deprecated
*/
function woocommerce_add_order_item_meta( $item_id, $meta_key, $meta_value, $unique = false ) {
return wc_add_order_item_meta( $item_id, $meta_key, $meta_value, $unique );
}
基本上,该函数已重命名为 ,因此,如果您需要该函数,请使用该函数。操作挂钩未重命名,并保持在:wc_add_order_item_meta()
class-wc-checkout.php
// Allow plugins to add order item meta
do_action( 'woocommerce_add_order_item_meta', $item_id, $values, $cart_item_key );