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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Woocommerce中为订单添加额外的元数据相关的知识,希望对你有一定的参考价值。

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

在这个插件的某些部分,我需要在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' );
        }

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

有人对这个有了解吗?

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

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

答案

2018年的方式:

建立在Guido W.P.回答你可以使用woocommerce_checkout_create_order动作钩子更轻,更有效的版本代码(使用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操作挂钩只是一步。请参阅下面的WC_Checkout create_order()方法的摘录(带有两个钩子):

/**
 * 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;

为什么要使用woocommerce_checkout_create_order?:

  • 因为您不需要使用$order = wc_get_order( $order_id );,因为您已经将$order作为钩子函数中的参数。
  • 您不需要使用$order->save();,因为无论如何都会这样做(参见源代码)
  • 此外,woocommerce_checkout_create_order已经在WooCommerce版本3中发布,它也是女佣。

所以这只适用于函数内的一行代码。

另一答案

在Mo Saeedi回答的基础上,我相信这个片段更符合WooCommerce 3.0引入的new CRUD approach

add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
    $order = wc_get_order( $order_id );
    $order->update_meta_data( 'my_custom_meta_key', 'my data' );
    $order->save();
} , 10, 2);

另请参阅WordPress论坛上的这些主题:

另一答案

答案是:我应该使用woocommerce_checkout_update_order_meta进行add_action,我也应该使用update_post_meta()为我的订单添加额外的元数据

    function add_item_meta( $order_id ) {
            //global $woocommerce;
            update_post_meta( $order_id, '_has_event', 'yes' );
        } 
另一答案

2016年方式:

add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {  
    update_post_meta( $order_id, 'my_custom_meta_key', 'my data' );  
} , 10, 2);
  • $order_id是订单的ID,存储为自定义帖子类型
  • $posted是来自$_POST的所有数据

以上是关于在Woocommerce中为订单添加额外的元数据的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 中为特定用户角色创建订单时添加额外的客户注释

在 WooCommerce 中为新客户订单添加订单备注

php Event Tickets Plus:在WooCommerce订单电子邮件的末尾添加额外的换行符。

php Event Tickets Plus:在WooCommerce订单电子邮件的末尾添加额外的换行符。

Woocommerce - 如何在自定义页面上显示当前用户的订单?

在 WooCommerce 管理员订单列表中添加带有付款网址的自定义列