在Woocommerce 3中将自定义结帐字段添加为“订购自定义元数据”

萨沙

WooCommerce 3.0出现之前,我的代码就像一种魅力,可以将购物车中的自定义值保存到结帐时的订单中。但是自那时以来,我无法为订单创建自定义元。

环境: Wordpress 4.9.4和WooCommerce 3.3.3

钩子

  1. add_action('woocommerce_checkout_update_order_meta', 'custom_meta_to_order', 20, 1);
  2. add_action('woocommerce_checkout_create_order', 'custom_meta_to_order', 20, 1);

Hook数字1是我尝​​试最多的数字,2数字只是对该主题中提到的一些字面更改的实验

功能

以下功能代码与挂钩号1相关

if (!function_exists('custom_meta_to_order')) {
    function custom_meta_to_order($order_id, $values) {
        $order = wc_get_order( $order_id );

        $order->update_meta_data('_TESTKEYstart', 'Hello');

        if (isset($values['myValue'])) {
            $myValue = $values['myValue'];
            if (!empty($myValue)) $order->update_meta_data('_myKey', $myValue);
        }

        $order->update_meta_data('_TESTKEYend', 'Bye');

        $order->save();
    }
}

我还在mySQL表中检查了table wp_woocommerce_order_itemmeta是否至少会创建两个_TESTKEY * -meta - entrys(因为它们没有条件)。

  • 但是似乎无法通过此挂钩和函数创建元键和值。
  • 该函数本身被调用,因此至少钩子本身正在运行。

所以我的问题是:“我做错了什么?”

LoicTheAztec

更新:您的代码中有一些错误…

  • 两个钩子都只有1个参数(没有2个,因此$values不存在)
  • 要获取您的自定义字段,您应该$_POST['myValue']改用。
  • 而每个钩子之类的东西都有不同的参数:
    • $order_id 对于 woocommerce_checkout_update_order_meta
    • $order 对于 woocommerce_checkout_create_order

在下面,我已替换为$_POST['myValue']$_POST['billing_country']因为您没有提供此自定义结帐字段的代码…

所以这是两种方式:

1)对我来说,最好的办法,为解释在这里

if ( ! function_exists('custom_meta_to_order') ) {
    add_action( 'woocommerce_checkout_create_order', 'custom_meta_to_order', 20, 1 );
    function custom_meta_to_order( $order ) {

        $order->update_meta_data('_TESTKEYstart', 'Hello');

        if (isset($_POST['billing_country'])) {
            $myValue = $_POST['billing_country'];
            if (!empty($myValue)) $order->update_meta_data('_my_key', $myValue);
        }

        $order->update_meta_data('_TESTKEYend', 'Bye');
    }
}

代码进入您的活动子主题(或主题)的function.php文件中经过测试和工作。


2)另一种方式:

if ( ! function_exists('custom_meta_to_order') ) {
    add_action('woocommerce_checkout_update_order_meta', 'custom_meta_to_order', 20, 1);
    function custom_meta_to_order( $order_id ) {
        // get an instance of the WC_Order object
        $order = wc_get_order( $order_id );

        $order->update_meta_data('_TESTKEYstart', 'Hello');

        if (isset($_POST['billing_country'])) {
            $myValue = $_POST['billing_country'];
            if (!empty($myValue)) $order->update_meta_data('_my_key', $myValue);
        }

        $order->update_meta_data('_TESTKEYend', 'Bye');

        // Save the order data and meta data
        $order->save();
    }
}

代码进入您的活动子主题(或主题)的function.php文件中经过测试和工作。

证据:

在此处输入图片说明

并且(在wp_postmeta此订单ID的数据库表中)

在此处输入图片说明

在WooCommerce 3.3+版本中测试


您也可以使用旧方法(有效)

if ( ! function_exists('custom_meta_to_order') ) {
    add_action('woocommerce_checkout_update_order_meta', 'custom_meta_to_order', 20, 1);
    function custom_meta_to_order( $order_id ) {

        update_post_meta( $order_id, '_TESTKEYstart', 'Hello' );

        if ( isset( $_POST['billing_country'] ) ) {
            $myValue = $_POST['billing_country'];
            if (!empty($myValue)) 
                update_post_meta( $order_id, '_my_key', $myValue);
        }

        update_post_meta( $order_id, '_TESTKEYend', 'Bye');
    }
}

代码进入您的活动子主题(或主题)的function.php文件中经过测试和工作。


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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在购物车和结帐时显示WooCommerce自定义产品字段元数据

在WooCommerce后端中将自定义字段添加为默认值,并填充以前的订单

Woocommerce中的条件自定义结帐字段验证问题

woocommerce将自定义结帐字段添加到电子邮件

在WooCommerce中清理自定义结帐字段数据

结帐中的Woocommerce自定义产品字段

在WooCommerce中将订单商品自定义元数据自动添加到订单注释中

在Woocommerce中的条款下方添加自定义结帐字段

在Woocommerce中将具有自定义数据的产品添加为单独的购物车项目

在Woocommerce中将自定义多选字段添加到管理产品选项设置

在WooCommerce 3中将自定义列添加到管理产品列表

在结帐页面和WooCommerce数据字段中添加取件地点自定义字段

在WooCommerce中将自定义字段添加为购物车项目元和订单项元

WooCommerce中的动态同步自定义结帐选择字段

在Woocommerce中将自定义字段值添加为购物车的免税费用

Woocommerce 3中的自定义结帐字段验证

在Woocommerce 3中将自定义元数据添加到管理订单编辑页面

将自定义产品元数据传递到Woocommerce 3中的订单

在Woocommerce中添加自定义结帐字段时,结帐页为空白

Woocommerce中的自定义结帐随机选择字段

在Woocommerce中捕获自定义结帐字段值

将自定义结帐字段值另存为WooCommerce上的用户数据

结帐页面WooCommerce中的自定义交付字段

向Woocommerce结帐添加新的自定义字段

在WooCommerce中将自定义结帐字段值添加到客户订单注释中

WooCommerce:将自定义元添加为隐藏订单项元以供内部使用

从WooCommerce的自定义结帐计费字段中获取价值

如何在Woocommerce中将自定义字段添加到类别中?

在woocommerce结帐页面自定义字段中添加日期