2016-06-27 24 views
5

Wir haben eine Reihe von Produkten mit entweder:WooCommerce: Warenkorb Preisüberschreibung mit Text

  • Kein Preis
  • Nullpreis

Wir machten sie mit dem eingebauten Haken käuflichen aber die Einkaufswagen zeigt sie immer noch mit einem 0 price während der Kasse.

Wir möchten den Einkaufswagen & Kassenzusammenfassung, um "Sonderbestellung" oder irgendeinen anderen Text anzuzeigen, aber es scheint, dass WooCommerce textbasierte Preise ungültig macht.

dies versucht: WooCommerce: Add product to cart with price override?

Die oben arbeitet mit einer Reihe überschreibt in Ordnung, aber wenn sie mit einem Text versucht, es Standardwerte überschreiben wieder ein 0 price zur Anzeige.

Warum? Diese Produkte werden auf Bestellung gefertigt und der Shop-Administrator aktualisiert den Preis, nachdem er mit dem Kunden/Lieferanten gesprochen hat.

Antwort

4

Sie müssen die Strings filtern, die den Preis und die Zwischensumme im Warenkorb anzeigen. Der Link, den Sie erwähnt haben, besprach die Änderung des tatsächlichen Preises. In Ihrem Fall ist der Preis $ 0, bis Sie später einen tatsächlichen Preis festlegen. Es gibt wahrscheinlich Filter für die Karre zu Summen, aber dies sollte ein Anfang sein:

add_filter('woocommerce_cart_item_price', 'so_38057349_cart_item_price', 10, 3); 
function so_38057349_cart_item_price($price, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 

    return $price; 
} 


add_filter('woocommerce_cart_item_subtotal', 'so_38057349_cart_item_subtotal', 10, 3); 
function so_38057349_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 


add_filter('woocommerce_order_formatted_line_subtotal', 'so_38057349_order_item_subtotal', 10, 3); 
function so_38057349_order_item_subtotal($subtotal, $item, $order) { 

    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 

Natürlich wird dies auch mit einem 0 Preis für jedes Produkt gelten und vielleicht nicht nur die, die Sie konfigurieren haben Gewohnheit zu sein gebaut, so dass Sie möglicherweise mehr bedingte Logik benötigen, als ich hier angegeben habe.

Folgen Sie Ihrem Kommentar .... woocommerce_order_amount_total ist die numerische Summe und nicht die angezeigte HTML. Sie können die aufgerufenen Funktionen in der Vorlage sehen.

function so_38057349_woocommerce_cart_subtotal($cart_subtotal, $compound, $cart) { 
    if($cart->subtotal == 0){ 
     $cart_subtotal = __('Order subtotal to be determined', 'yourtheme'); 
    } 
    return $cart_subtotal; 
}; 
add_filter('woocommerce_cart_subtotal', 'so_38057349_woocommerce_cart_subtotal', 10, 3); 


// define the woocommerce_order_amount_total callback 
function so_38057349_woocommerce_order_amount_total($order_total) { 
    if(WC()->cart->get_total() == 0){ 
     $order_total = __('Order total to be determined', 'yourtheme'); 
    } 
    return $order_total; 
}; 
add_filter('woocommerce_cart_totals_order_total_html', 'so_38057349_woocommerce_order_amount_total'); 

Aktualisiert Screenshot: cart

+0

Vielen Dank Helga, es ist genau das, was benötigt wurde. Erweitert um Ihr Beispiel, um auch die Cart & Checkout-Seiten abzudecken! – radug

+0

Überprüfen Sie meine Bearbeitung. Ähnlich wie der Fehler in Ihrer Frage ist 'woocommerce_order_amount_total' nicht als HTML-String gedacht. – helgatheviking

1

auf Helgas Antwort erweitert, hier ist der vollständige Code, der die Preise auf Veränderungen Warenkorb Seiten ‚bestimmt werden‘, Kasse Seiten und Auftragsbestätigung E-Mail zu. Der Text wurde anders gehalten, damit die Leute erkennen können, wo jeder Filter hingehört.

add_filter('woocommerce_cart_item_price', 'filter_cart_item_price', 10, 3); 
function filter_cart_item_price($price, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 
    return $price; 
} 

add_filter('woocommerce_cart_item_subtotal', 'filter_cart_item_subtotal', 10, 3); 
function filter_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_cart_subtotal', 'filter_woocommerce_cart_subtotal', 10, 3); 
function filter_woocommerce_cart_subtotal($cart_subtotal, $compound, $instance) { 
    $cart_subtotal = __('To be determined 4', 'yourtheme'); 
    return $cart_subtotal; 
}; 


add_filter('woocommerce_order_formatted_line_subtotal', 'filter_order_item_subtotal', 10, 3); 
function filter_order_item_subtotal($subtotal, $item, $order) { 
    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined 2', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_order_subtotal_to_display', 'filter_woocommerce_order_subtotal_to_display', 10, 3); 
function filter_woocommerce_order_subtotal_to_display($subtotal, $compound, $instance) { 
     $subtotal = __('To be determined 6', 'yourtheme'); 
    return $subtotal; 
}; 

add_filter('woocommerce_get_formatted_order_total', 'filter_woocommerce_get_formatted_order_total', 10, 2); 
function filter_woocommerce_get_formatted_order_total($formatted_total, $instance) { 
     $formatted_total = __('To be determined 8', 'yourtheme'); 
    return $formatted_total; 
};