我有一个自定义插件,允许客户将自定义信息添加到他们的订单中。
该商品将添加到购物车,并且自定义数据将显示在购物车页面上。但是,自定义信息不会转移到后端的订单页面。理想情况下,我还希望将自定义数据添加到客户订单电子邮件中。
当前代码如下:
<?php
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 = …Run Code Online (Sandbox Code Playgroud) 我想向 WooCommerce 中的订单项目添加一些元数据。这些元字段仅供内部使用,不应可见。
我们的产品中有一些额外的字段,例如额外费用。我想在导出订单后使用该费用进行处理。
我在这里找到了一个非常好的答案:https ://stackoverflow.com/a/41988701/1788961
add_action('woocommerce_checkout_create_order_line_item', 'add_custom_hiden_order_item_meta_data', 20, 4 );
function add_custom_hiden_order_item_meta_data( $item, $cart_item_key, $values, $order ) {
// Set user meta custom field as order item meta
if( $meta_value = get_user_meta( $order->get_user_id(), 'billing_enumber', true ) )
$item->update_meta_data( 'pa_billing-e-number', $meta_value );
}
Run Code Online (Sandbox Code Playgroud)
但在此示例中,元字段中的内容将显示在客户的订单详细信息中。
有没有办法使这些字段仅在后端可见并可用于内部功能?
我有使用woocommerce_add_order_item_meta挂钩的自定义代码。但是woocommerce 3.4.0显示错误日志:“自版本3.0.0开始不赞成woocommerce_add_order_item_meta!请改用woocommerce_new_order_item。” 如何解决?非常感谢你。我的代码:
// add data design to order
function tshirt_order_meta_handler( $item_id, $values, $cart_item_key ) {
if( WC()->session->__isset( $cart_item_key.'_designer' ) ) {
wc_add_order_item_meta( $item_id, "custom_designer", WC()->session->get( $cart_item_key.'_designer') );
}
}
add_action( 'woocommerce_add_order_item_meta', 'tshirt_order_meta_handler', 1, 3 );
Run Code Online (Sandbox Code Playgroud)