2017-11-29 3 views
1

Ich benutze eine Funktion, die es mir erlaubt, mehr als eine Fracht im Warenkorb basierend auf der Versandklasse jedes Produkts zu berechnen. Die Funktion hat kein Problem, es ist perfekt. Aber wenn ich die Anfrage im Bereich der Verwaltung von Woocommerce überprüfe, muss ich in der Methode der Vorlage den Namen der Klasse identifizieren, die jedem Gegenstand entspricht.Produkte anzeigen Versandklassen in WooCommerce Auftrag bearbeiten Seite

Das heißt, ich muss die Artikel für jede Klasse unterscheiden, da ich die Versandklasse verwende, um verschiedene Lieferanten über die Bestellungen im Laden zu informieren.

Aber ich habe keine Ahnung, wie Sie diese Einstellung vornehmen.

Unten ist die Funktion, die ich benutze, mit Paketen basierend auf den erstellten Klassen arbeiten. Diese Funktion ist verantwortlich für die Berechnung der Fracht im Warenkorb entsprechend der Versandklasse. Wie zeige ich den Namen der Versandart auf der Bestellseite im Store-Admin an?

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'); 

Antwort

0

Ich kann noch nicht den Weg zu den Versandklassen in der Reihenfolge Versand Artikel angezeigt werden. aber ich kann diese Versandklasse in Auftrag bearbeiten „LINE_ITEMS“ anzuzeigen diese Weise:

// 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>'; 
    } 
} 

-Code geht in function.php Datei Ihres aktiven Kind Thema (oder aktives Thema) oder in einer Plugin-Datei.

Getestet und funktioniert.

enter image description here

Hinweis: Sie werden so etwas wie erhalten auf WooCommerce 3.2.x ich einen Fehler beim Auschecken, im Zusammenhang mit Ihrem eigentlichen Code.

Verwandte Themen