gpt4 book ai didi

php - 在 Woocommerce 中为订单添加额外的元数据

转载 作者:IT王子 更新时间:2023-10-29 00:05:32 27 4
gpt4 key购买 nike

我正在为我的网站创建一个自定义插件。

在这个插件的某些部分,我需要为每个订单在 wp_postmeta 中存储额外的元数据。

我在插件的类中添加了这个:

add_action ('woocommerce_before_checkout_process', array( &$this, 'add_item_meta', 10, 2) );

这是 add_item_meta() 函数:

function add_item_meta( $item_id, $values ) {
wc_add_order_item_meta($item_id, '_has_event', 'yes' );
}

此功能不完整,但此代码没有任何反应;我想我需要使用另一个钩子(Hook),但我找不到合适的。

有人知道吗?

$item_id 还有另一个问题:这是 woocommerce 全局变量,但我在插件中看不到它!

我的意思是我无法从我的插件或类似的东西中访问这个变量!

最佳答案

2018 年的方式:

建立在 Guido W.P. 的答案上,您可以使用 woocommerce_checkout_create_order 操作 Hook 更轻便和有效的版本代码(使用WC 3+ CRUD methods):

add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order->update_meta_data( '_custom_meta_key', 'value' );
}

代码进入您的事件子主题(或事件主题)的 function.php 文件。

在 WooCommerce 3+ (仅) 中测试和工作。


一些解释:

woocommerce_checkout_create_order 操作 Hook 只是保存订单数据之前的一个步骤。请参阅下面 WC_Checkout create_order() 方法(带有两个 Hook )的摘录:

/**
* Action hook to adjust order before save.
* @since 3.0.0
*/
do_action( 'woocommerce_checkout_create_order', $order, $data );

// Save the order.
$order_id = $order->save();

do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data );

return $order_id;

Why using woocommerce_checkout_create_order instead?:

  • Because You don't need to use $order = wc_get_order( $order_id ); as you already got $order as an argument in the hooked function.
  • You don't need to use $order->save(); as this will be done just after anyway (see the source code)
  • This hook has been released since WooCommerce version 3 and it's made for the same purpose, allowing to use all available WC_Order methods.

So this just works with a single line of code inside the function.

关于php - 在 Woocommerce 中为订单添加额外的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com