php 添加订单,php-将自定义数据添加到Woocommerce订单商品

我有一个自定义插件,可让客户向其订单中添加自定义信息.

该项目已添加到购物车,并且自定义数据显示在购物车页面上.但是,自定义信息不会传递到后端的订单页面.理想情况下,我还希望将自定义数据添加到客户订单电子邮件中.

当前代码如下:

function wcpc_save_custom_product_field( $cart_item_data, $product_id ) {

if( isset( $_REQUEST['wcpc_custom_product'] ) ) {

$cart_item_data[ 'wcpc_custom_product' ] = $_REQUEST['wcpc_custom_product'];

$cart_item_data[ 'wcpc_custom_price' ] = $_REQUEST['wcpc_custom_price'];

/* below statement make sure every add to cart action as unique line item */

$cart_item_data['unique_key'] = md5( microtime().rand() );

}

return $cart_item_data;

}

add_action( 'woocommerce_add_cart_item_data', 'wcpc_save_custom_product_field', 10, 2 );

function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {

$custom_items = array();

/* Woo 2.4.2 updates */

if( !empty( $cart_data ) ) {

$custom_items = $cart_data;

}

if( isset( $cart_item['wcpc_custom_product'] ) && $cart_item['wcpc_custom_product'] != '' ) {

$custom_items[] = array( "name" => 'Custom', "value" => $cart_item['wcpc_custom_product'] );

}

return $custom_items;

}

add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {

// This is necessary for WC 3.0+

if ( is_admin() && ! defined( 'DOING_AJAX' ) )

return;

foreach ( $cart_object->get_cart() as $key => $value ) {

if(isset($value['wcpc_custom_price'])) {

$value['data']->set_price( $value['wcpc_custom_price'] );

}

}

}

?>

我尝试修改在线找到的代码段并将其添加到上述代码中.但是,当我实现此功能时,购物车完全坏了:

function wcpc_order_item_product( $cart_item, $order_item ){

if( isset( $order_item['wcpc_custom_product'] ) ){

$cart_item_meta['wcpc_custom_product'] = $order_item['wcpc_custom_product'];

}

return $cart_item;

}

add_filter( 'woocommerce_order_item_product', 'wcpc_order_item_product', 10, 2 );

任何帮助将不胜感激.我没有太多的编码经验,所以我正在努力寻找一种方法来使其工作.

解决方法:

钩子woocommerce_add_order_item_meta即将被弃用.从Woocommerce 3开始,可以使用更好的钩子.尝试这个:

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 ) {

if( ! isset( $values['wcpc_custom_product'] ) ) return;

if( ! empty( $values['wcpc_custom_product'] ) )

$item->update_meta_data( 'Custom label', $values['wcpc_custom_product'] );

}

72b390b7d016118186c3770d55872582.png

您必须将“自定义标签”替换为要显示的标签,并带有以下值:

这样,您的自定义字段将在后端和前端订单以及电子邮件通知中随处显示.

标签:orders,woocommerce,hook-woocommerce,wordpress,php

来源: https://codeday.me/bug/20191109/2010881.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值