当前位置: 首页 > 知识库问答 >
问题:

Woocommerce:用哪个钩子替换不推荐的“Woocommerce\u添加\u订单\u项目\u元”

樊烨烨
2023-03-14

需要向订单项目添加自定义元。谷歌搜索了它,大多数文章说使用“woocommerce\u add\u order\u item\u meta”钩子。最新版本2.3中不推荐使用此挂钩。有人,请告诉我该用哪个钩子代替。

http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html

共有3个答案

彭展
2023-03-14

从3.0版开始,这个钩子似乎也被弃用了。4.我收到以下通知:

The The "woocommerce_add_order_item_meta" hook uses out of date data structures and function is deprecated since version 3.0.4. Replace with woocommerce_new_order_item.

我已经在一个违规插件的add_action语句中用woocommerce_new_order_item替换了操作名woocommerce_add_order_item_meta,弃用通知消失了,问题是现在一些参数出现在legacy_values数组中。我使用插件YITH WooCommerce产品附加组件,应该附加到订单的产品元数据不会被插件提取,因此不会与订单一起存储。因此,在插件中修复此问题之前,您必须使用弃用通知。

呼延化
2023-03-14

如果您查看wc不推荐使用的函数。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 );
任云瀚
2023-03-14

2017/2018正确的方式(使用新的CRUD设置器和获取器方法)

相关:在woocommerce 3.4中替换woocommerce\添加\订单\项目\元挂钩

由于woocommerce 3改进了许多功能,并进行了重大更改,因此即使在woocommerce 3.3版中,操作挂钩woocommerce\u add\u order\u item\u meta仍能完美工作。

此钩子是通过签出过程中的WC\u Checkout类方法和相关函数启用的,而不是在购物车数据不再可用的WC\u Order类中启用的。

现在,随着woocommerce 3引入了新的CRUD setters和getter方法,将要使用的类似替换钩子是woocommerce\u checkout\u create\u order\u line\u item,它具有与购物车数据类似的有用参数。

由于无法访问购物车数据,woocommerce\u new\u order\u项目确实不方便。

让我们看看如何使用woocommerce\u checkout\u create\u order\u line\u item。它有4个可用参数:

  • $project是一个实例的WC_Order_Item_Product新引入的Class
  • $cart_item_key是购物车项目唯一的哈希密钥
  • $value是购物车项目
  • $orderWC_Order对象的实例(在某些特定情况下,这是一个非常有用的附加参数)

在这个钩子中,我们将用新的wc\u Dataupdate\u meta\u Data()方法替换旧的工作函数wc\u add\u order\u item\u meta()。

例子:

## --- 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\u add\u order\u item\u metahook对旧方法执行相同的操作,因为它具有几乎相同的有用参数:

## --- 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\u checkout\u create\u order\u line\u item是与woocommerce 3一起使用的正确的替换挂钩,并且是新的CRUD setters和getter方法。

 类似资料:
  • 我试图在wp_woocommerce_order_itemmeta表中创建自定义元数据。但是要创建我想存储为元数据的数据,我需要知道在WooCommerce钩子woocommerce_checkout_create_order_line_item上创建的订单项的product_id。 我已经成功地用会话变量的值创建了一个元记录,但是当我试图获取订单项目的产品id时,我的代码失败了。我非常希望能找到

  • 如果使用我的优惠券类型,我将尝试折扣购物车中最便宜的商品: 折扣金额非常奇怪-无论我怎么尝试,它都不会达到我期望的价值。起初我以为这是一个百分比折扣,但我希望这是一个固定的数额。我试着在网站的其他地方运行我的“获取最低价格”功能,当最低值项为11.95时,它返回1.195,所以我知道该部分工作正常。但是265.60的总折扣是23.90——我就是不明白! 我只想在购物车里买到最低价的商品,并打折。

  • NNAPI 1.1已经支持SPACE_TO_BATCH_ND和BATCH_TO_SPACE_ND操作,但是当前的TFLite代码还没有实现。参见:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/nnapi_delegate.cc#L607 我试着这样添加它们: 但它不起作用,当我在android设备上运行它时

  • 我正在与CheckMarx漏洞之一作斗争。我需要一些指导来支持这一点。以下是我的代码: 这里con是(HttpurlConnection)新URL(“一些URL”)。openConnection()。 所以,checkmarx在《in》中强调了这个问题。readLine()。 我尝试的变通方法: 1: StringEscape eUtils.unescapeJson(in.readLine()),

  • 我正在尝试获取具有某些类别和属性的产品列表。Dirrect链接工作正常,但自定义规则无法按预期工作。是的,我在管理面板中重新加载永久链接。请帮我找到解决办法。吴哥商业产品清单。 如果我打开index.php?product_cat=oil

  • Elasticsearch中的新search_as_you_type数据类型和标记器类型edge_ngram有什么区别?在构建即用型搜索引擎时更喜欢哪一个? Elasticsearch的文档提供了两种实现: search\u as\u you\u type数据类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/sea