2017-11-29 16 views
1

私は、カート内で複数の貨物を各商品の出荷クラスに基づいて計算する機能を使用しています。この関数には問題はなく、完璧です。しかし、私はwoocommerceの管理の領域での要求をチェックするとき、私は提出の方法で、各項目に対応するクラスの名前を識別する必要があります。商品を表示する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'); 

答えて

0

商品を出荷するために出荷クラスを表示する方法はまだありません。しかし、私はこの方法で注文編集「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の上で、私はエラーを取得します。

関連する問題