需要添加自定义元来订购商品。谷歌搜索它,大多数文章都说使用“woocommerce_add_order_item_meta”钩子(Hook)。该钩子(Hook)在最新版本 2.3.7 中已弃用。有人请告诉我该使用哪个钩子(Hook)。
http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html
最佳答案
2017/2018 正确方法 (使用新的 CRUD setter 和 Getters 方法)
Related: Replace woocommerce_add_order_item_meta hook in Woocommerce 3.4
由于 woocommerce 3 改进了许多功能并做出了巨大的改变,因此即使在 woocommerce 版本 3.3+ 中,操作 Hook woocommerce_add_order_item_meta
仍然可以完美工作。
此 Hook 由结账过程中的 WC_Checkout 类方法和相关函数启用,而不是在购物车数据不再存在的 WC_Order 类中启用可用。
Now as Woocommmerce 3 has introduced new CRUD setters and getters methods, the similar replacement hook to be used is
woocommerce_checkout_create_order_line_item
that has similar useful arguments as cart data.The
woocommerce_new_order_item
is really NOT convenient as cart data is not accessible.
让我们看看如何使用 woocommerce_checkout_create_order_line_item
。它有 4 个可用参数:
$item
是WC_Order_Item_Product
新引入的类的实例$cart_item_key
是购物车商品唯一哈希键$values
是购物车商品$order
WC_Order 对象的实例(在某些特定情况下这是一个非常有用的附加参数)
在此 Hook 中,我们将用新的 WC_Data
update_meta_data()
方法替换旧的工作函数 wc_add_order_item_meta() ,与 $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
Hook 以旧方式执行相同操作,因为它具有几乎相同的有用参数:
## --- 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'] );
}
}
Conclusion:
woocommerce_checkout_create_order_line_item
is the right replacement hook to be used with WooCommerce 3+ and that new CRUD setters and getters methods.
关于php - Woocommerce:要替换哪个 Hook 已弃用 "woocommerce_add_order_item_meta",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666820/