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

将产品重量和尺寸添加为WooCommerce管理手册订单上的订单项元数据

邬宏扬
2023-03-14

基于将产品自定义字段保存为自定义订单项元数据的WooCommerce管理手动订单

我有这些代码来显示从前端下的订单的产品重量和尺寸,但我无法让它们用于从后端手动下的订单。当我添加产品时,我看不到重量和尺寸,它们也不会显示在页面上以支付订单、收到订单和发送电子邮件。

这是我的代码:

在任何地方展示并保存产品的重量。

// Display the cart item weight in cart and checkout pages
add_filter( 'woocommerce_get_item_data', 'display_custom_item_data', 10, 2 );
function display_custom_item_data( $cart_item_data, $cart_item ) {
    if ( $cart_item['data']->get_weight() > 0 ){
        $cart_item_data[] = array(
            'name' => __( 'Weight', 'woocommerce' ),
            'value' =>  $cart_item['data']->get_weight()  . ' ' . get_option('woocommerce_weight_unit')
        );
    }
    return $cart_item_data;
}

// Save and Display the order item weight (everywhere)
add_action( 'woocommerce_checkout_create_order_line_item', 'display_order_item_data', 20, 4 );
function display_order_item_data( $item, $cart_item_key, $values, $order ) {
    if ( $values['data']->get_weight() > 0 ){
        $item->update_meta_data( __( 'Weight', 'woocommerce' ), $values['data']->get_weight()  . ' ' . get_option('woocommerce_weight_unit') );
    }
}

到处显示和保存产品尺寸。

// Display the cart item weight in dimensions and checkout pages
add_filter( 'woocommerce_get_item_data', 'display_custom_item_data1', 10, 2 );
function display_custom_item_data1( $cart_item_data, $cart_item ) {
    if ( $cart_item['data']->has_dimensions() > 0 ){
        $cart_item_data[] = array(
            'name' => __( 'Dimensions', 'woocommerce' ),
            'value' =>  $cart_item['data']->get_dimensions()  . ' ' . get_option('woocommerce_dimensions_unit')
        );
    }
    return $cart_item_data;
}

// Save and Display the order item dimensions (everywhere)
add_action( 'woocommerce_checkout_create_order_line_item', 'display_order_item_data1', 20, 4 );
function display_order_item_data1( $item, $cart_item_key, $values, $order ) {
    if ( $values['data']->has_dimensions() > 0 ){
        $item->update_meta_data( __( 'Dimensions', 'woocommerce' ), $values['data']->get_dimensions()  . ' ' . get_option('woocommerce_dimensions_unit') );
    }
}

add_filter( 'woocommerce_format_dimensions', 'custom_formated_product_dimentions', 10, 2 );
function custom_formated_product_dimentions( $dimension_string, $dimensions ){
    $text_domain    = 'woocommerce';
    $dimension_unit = get_option('woocommerce_dimensions_unit');

    if ( empty( $dimension_string ) )
        return __( 'N/A', $text_domain );

    // Set here your new array of dimensions based on existing keys/values
    $new_dimentions = array(
        __('Largo:', $text_domain)    => $dimensions['length'],
        __('Ancho:', $text_domain) => $dimensions['width'],
        __('Alto:', $text_domain)     => $dimensions['height'],
    );

    $dimensions = array_filter( array_map( 'wc_format_localized_decimal', $new_dimentions ) );

    foreach( $dimensions as $key => $dimention ){
        $dimensions[$key] = ucfirst($key) . ' ' . $dimention. ' ' . get_option( 'woocommerce_dimension_unit' );
    }

    return implode( ' × ',  $dimensions);
}

共有1个答案

仲俊豪
2023-03-14

要将产品重量和尺寸显示为手动后端订单上的自定义订单项目元数据,您将使用woocommerce\u-before\u-save\u-order\u-item专用操作挂钩,如下所示:

add_action( 'woocommerce_before_save_order_item', 'action_before_save_order_item_callback' );
function action_before_save_order_item_callback( $item ) {
    // 1. WEIGHT
    $weight = $item->get_meta('Weight');
    // If custom meta data is not saved as order item
    if ( empty($weight) ) {
        // Get the WC_Product Object
        $product = $item->get_product();
        
        // Get custom meta data from the product
        $weight      = $product->get_weight();
        $weight_unit = get_option('woocommerce_weight_unit');

        // Save it as custom order item (if defined for the product)        
        if ( $weight ) {
            $item->update_meta_data( 'Weight', $weight . ' ' . $weight_unit );
        }
    }
    
    // 2. DIMENSIONS
    $dimensions = $item->get_meta('Dimensions');
    // If custom meta data is not saved as order item
    if ( empty($dimensions) ) {
        // Get the WC_Product Object
        $product = $item->get_product();
        
        // Get custom meta data from the product
        $dimensions = $product->get_dimensions();
        $dim_unit   = get_option('woocommerce_dimensions_unit');

        // Save it as custom order item (if defined for the product)        
        if ( $dimensions ) {
            $item->update_meta_data( 'Dimensions', $dimensions . ' ' . $dim_unit );
        }
    }
}

代码进入函数。活动子主题(或活动主题)的php文件。测试和工作。

 类似资料:
  • 当从管理员向订单添加产品时,我尝试将自定义产品元添加到订单项元。这是我的代码,它在后端什么都不做。。。

  • 我正在为WooCommerce开发一个插件。我想覆盖admin的订单详细信息模板。我已经阅读了关于https://www.skyverge.com/blog/override-woocommerce-template-file-within-a-plugin/,但我仍然不明白如何覆盖admin的订单详细信息模板。以下是我的代码: 它不会在订单详细信息之后调用与

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

  • 我正在为我的WooCommerce商店出售的产品使用一些自定义项目元。我正在寻找一种方法来隐藏项目元显示在管理订单页面上的订单项目部分下。 我使用下划线的元名称,但元仍然显示。 你可以在附件中看到我的意思。。。 想法?

  • 我想在Woocommerce的管理员查看订单页面上添加futured图像。已创建新列,但未显示产品图像。我应该如何显示订单缩略图?谢谢

  • 在Woocommerce 3应答代码中使用将自定义产品元数据传递到订单,当从后端手动创建订单时,从后端手动添加产品时,是否可以保存和显示自定义元数据? 这是我的代码(略有改动): 当客户机从前端创建订单时,这种方法可以正常工作。但是,当管理员从后端手动创建订单并添加产品时,自定义元数据不可见。 对于手动创建的订单,如何解决此问题,允许添加产品自定义字段作为自定义订单项目数据?