在WooCommerce订单编辑页面

时间:2017-11-29 20:09:00

标签: php wordpress woocommerce shipping orders

我使用的功能允许我根据每种产品的运输类别计算购物车中的多个运费。功能没有问题,它是完美的。但是当我检查woocommerce管理领域的请求时,我需要在提交方法中确定与每个项目对应的类的名称。

也就是说,我需要区分每个类的项目,因为我正在使用货运类向不同的供应商通知商店的订单。

但我不知道如何进行这项调整。

下面是我使用的函数,使用基于创建的类的包。此功能负责根据运输类别计算购物车中的运费。如何在商店管理员的订单页面上显示货运类名称?

    function custom_split_shipping_packages_shipping_class( $packages ) {
    // Reset all packages
    $packages              = array();
    $regular_package_items = array();
    $split_package_items   = array();
    $split_shipping_class = 'da-vinci'; // Shipping class slug
    foreach ( WC()->cart->get_cart() as $item_key => $item ) {
        if ( $item['data']->needs_shipping() ) {
            if ( $split_shipping_class == $item['data']->get_shipping_class() ) {
                $split_package_items[ $item_key ] = $item;
            } else {
                $regular_package_items[ $item_key ] = $item;
            }
        }
    }
    // Create shipping packages
    if ( $regular_package_items ) {
        $packages[] = array(
            'contents'        => $regular_package_items,
            'contents_cost'   => array_sum( wp_list_pluck( $regular_package_items, 'line_total' ) ),
            'applied_coupons' => WC()->cart->get_applied_coupons(),
            'user'            => array(
                 'ID' => get_current_user_id(),
            ),
            'destination'    => array(
                'country'    => WC()->customer->get_shipping_country(),
                'state'      => WC()->customer->get_shipping_state(),
                'postcode'   => WC()->customer->get_shipping_postcode(),
                'city'       => WC()->customer->get_shipping_city(),
                'address'    => WC()->customer->get_shipping_address(),
                'address_2'  => WC()->customer->get_shipping_address_2()
            )
        );
    }
    if ( $split_package_items ) {
        $packages[] = array(
            'contents'        => $split_package_items,
            'contents_cost'   => array_sum( wp_list_pluck( $split_package_items, 'line_total' ) ),
            'applied_coupons' => WC()->cart->get_applied_coupons(),
            'user'            => array(
                 'ID' => get_current_user_id(),
            ),
            'destination'    => array(
                'country'    => WC()->customer->get_shipping_country(),
                'state'      => WC()->customer->get_shipping_state(),
                'postcode'   => WC()->customer->get_shipping_postcode(),
                'city'       => WC()->customer->get_shipping_city(),
                'address'    => WC()->customer->get_shipping_address(),
                'address_2'  => WC()->customer->get_shipping_address_2()
            )
        );
    }
    return $packages;
}
add_filter( 'woocommerce_cart_shipping_packages', 'custom_split_shipping_packages_shipping_class' );

1 个答案:

答案 0 :(得分:1)

我无法在装运物品时显示运费等级。但我可以在订单编辑" line_items"中显示此运费类别。这样:

// Display the shipping classes names in Order edit line items
add_action( 'woocommerce_after_order_itemmeta', 'custom_admin_order_itemmeta', 15, 3 );
function custom_admin_order_itemmeta( $item_id, $item, $product ){
    if( ! is_admin() ) return; // only backend

    // Display the shipping class names if they exist
    if( $item->is_type( 'line_item' ) ){
        $label = __( 'Shipping class:', 'woocommerce' );
        $class_id = $product->get_shipping_class_id();
        if( $class_id > 0 ){
            $term = get_term_by( 'id', $class_id, 'product_shipping_class' );
            $class_name = esc_html($term->name);
        }
        if( isset($class_name) )
            echo '<div class="wc-order-item-ship-class"><strong>' . $label . '</strong> <span style="color:#ca4a1f;">' . $class_name . '</span></div>';
    }
}

代码放在活动子主题(或活动主题)的function.php文件中或任何插件文件中。

经过测试和工作。你会得到类似的东西:

enter image description here

  

注意:在Woocommerce 3.2.x上,我在结账时遇到与您的实际代码相关的错误。