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

在woocommerce上获取产品数据\u结帐\u创建\u订单\u行\u项目挂钩

严开宇
2023-03-14

我试图在wp_woocommerce_order_itemmeta表中创建自定义元数据。但是要创建我想存储为元数据的数据,我需要知道在WooCommerce钩子woocommerce_checkout_create_order_line_item上创建的订单项的product_id。

我已经成功地用会话变量的值创建了一个元记录,但是当我试图获取订单项目的产品id时,我的代码失败了。我非常希望能找到解决方案

因此,下面的代码通过在meta_key_raw_location_id的表中创建wp_woocommerce_order_itemmeta记录来工作

add_action('woocommerce_checkout_create_order_line_item', 'raw_order_item_meta', 20, 2);
function raw_order_item_meta( $order ) {
    $order->update_meta_data( '_raw_location_id', $_SESSION['location_id'] );
}

所以我“增强”了代码,以创建另一个记录,但meta_key值为product_id美元。在添加我认为必要的代码时,结帐不完成,所以我永远不会到达感谢页面。结帐页将重新显示,数据库中没有任何更改。我通过一次添加一行代码进行了细致的测试。为了便于参考,我在下面对代码行进行了编号。

我发现添加行“3”会导致错误。因此,我无法验证第4行

>

  • add_action('woocommerce_checkout_create_order_line_item','raw_order_item_meta',20,2);
  • 函数raw_order_item_meta

    $项目=$order-

    $product\U id=$item-

    美元订单-

    美元订单-

    }

  • 共有1个答案

    林辰钊
    2023-03-14

    您正在以错误的方式使用woocommerce_checkout_create_order_line_item,因为您的代码中的钩子参数是错误的。正确的代码是:

    add_action('woocommerce_checkout_create_order_line_item', 'add_order_item_custom_meta', 10, 4 );
    function add_order_item_custom_meta( $item, $cart_item_key, $cart_item, $order ) {
        $item->update_meta_data( '_raw_location_id', $_SESSION['location_id'] );
    }
    

    因此,正如您所看到的,您不需要循环查看订单项目(作为当前订单项目,$items),您的第二个代码将是:

    add_action('woocommerce_checkout_create_order_line_item', 'add_order_item_custom_meta', 10, 4 );
    function add_order_item_custom_meta( $item, $cart_item_key, $cart_item, $order ) {
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
    
        $item->update_meta_data( '_raw_location_id', $_SESSION['location_id'] );
        $item->update_meta_data( '_raw_product_id', $product_id );
    }
    

    或者以另一种方式做同样的事情:

    add_action('woocommerce_checkout_create_order_line_item', 'add_order_item_custom_meta', 10, 4 );
    function add_order_item_custom_meta( $item, $cart_item_key, $cart_item, $order ) {
        $product = $item->get_product(); // The WC_Product instance Object
    
        $item->update_meta_data( '_raw_location_id', $_SESSION['location_id'] );
        $item->update_meta_data( '_raw_product_id', $product->get_id() ); // Set the product ID 
    }
    

    代码进入函数。活动子主题(或活动主题)的php文件。它应该会起作用。

    相关的:

    • 在WooCommerce 3中获取订单项目和WC_Order_Item_Product
    • WooCommerce:用哪个钩子替换已弃用的woocommerce_add_order_item_meta
     类似资料:
    • 需要向订单项目添加自定义元。谷歌搜索了它,大多数文章说使用“woocommerce\u add\u order\u item\u meta”钩子。最新版本2.3中不推荐使用此挂钩。有人,请告诉我该用哪个钩子代替。 http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html

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

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

    • 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

    • PHP/Apache2中的文件获取内容是从Facebook获取用户图片。直到最近,它一直运转良好。现在,它总是在一分钟后超时,在我的Apache2 error.log中有以下错误: PHP警告:文件\u获取\u内容(https://graph.facebook.com/999999999/picture?width=200):无法打开流:连接超时 下面是代码(我最近添加了$context以查看它是

    • 我正在开发一个lwjgl项目,其代码如下: 我收到以下错误消息: org.lwjgl.LWJGLException:无法在org.lwjgl.opengl.创建上下文(WGL_ARB_create_context)在org.lwjgl.opengl.WindowsContextImplementation.create(WindowsContextImplementation.java:50)在o