当前位置: 首页 > 知识库问答 >
问题:

向订单项目添加自定义数据

陆耀
2023-03-14

我有一个自定义插件,允许客户向订单中添加自定义信息。

项目被添加到购物车,自定义数据显示在购物车页面上。但是,自定义信息不会转移到后端的订单页面。理想情况下,我也希望将自定义数据添加到客户的订单电子邮件中。

目前的代码如下:

<?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 = $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 );

任何帮助都将不胜感激。我没有太多的编码经验,我正在努力找到一种方法来实现这一点。

共有2个答案

上官和韵
2023-03-14

您可以使用wc_add_order_item_meta()保存自定义元顺序和后端

例如e::

add_action('woocommerce_add_order_item_meta','add_values_to_order_item_meta',1,2);
if(!function_exists('add_values_to_order_item_meta'))
{
  function add_values_to_order_item_meta($item_id, $values)
  {
        global $woocommerce,$wpdb;
        $user_custom_values = $values['user_custom_data_value'];
        if(!empty($user_custom_values))
        {
            wc_add_order_item_meta($item_id,'user_custom_data',$user_custom_values);  
        }
  }
}
add_action('woocommerce_add_order_item_meta','add_values_to_order_item_meta',1,2);
if(!function_exists('add_values_to_order_item_meta')) 
{ 
    function add_values_to_order_item_meta($item_id, $values) 
        { 
            global $woocommerce,$wpdb;
            $user_custom_values = $values['wcpc_custom_product'];
            if(!empty($user_custom_values)) {
            wc_add_order_item_meta($item_id,'wcpc_custom_product',$user_custom_values); }
        } 
}
刁英朗
2023-03-14

钩子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'] );

}

您必须将“自定义标签”替换为要显示的标签的值…

这样,您的自定义字段将显示在所有位置,在后端和前端订单以及电子邮件通知上。

看看这个相关的线程,它会给你所有的解释:
WooCommerce:用哪个钩子代替不建议使用的woocommerce_add_order_item_meta

 类似资料:
  • 我有一个WordPress菜单,其中有一些菜单项是我通过标准(拖放)WordPress管理菜单功能添加的。最近,我不得不在菜单中添加另一项,以生成动态href链接。我在函数中使用以下代码实现了这一点。php文件: //将“我的个人资料”菜单项动态添加到“成员”菜单(根据当前登录的用户生成用户名) add_filter(wp_nav_menu_items、add_profilelink_in_men

  • 使用以下代码,我可以在WooCommerce产品上获得一个自定义字段,但是如何在订单、结帐和管理订单(后端)上显示它呢? 这是我在每个产品上的自定义字段 这是我的管理订单(后端)详细信息。我尝试显示我在每个产品帖子中输入的正确元数据。 如何在管理订单中显示我在自定义字段中输入的值?我也希望有人能帮助我显示在订单和结帐页面的元。。。或者引导我走向正确的方向。我意识到,为了在管理订单中显示它,我必须确

  • 我有一个WooCommerce订单的自定义元数据,现在我想在结账后在感谢页面上显示它,但是,数据不可用。数据保存在管理员中,我似乎无法访问它。 但是当我转储时,我的元数据不存在。 我正在使用; 保存数据,但转储

  • 我正在尝试添加一个自定义字段到忍者表单(第3.3节)。到处都找不到完整的例子。 仔细查看代码,似乎过滤器'ninja_forms_register_fields'可以起到作用,但我无法让它在任何地方运行。