2016-11-21 4 views
0

Ich habe den Preis der Produkte dynamisch nach bestimmten Kriterien überschrieben, aber die Ajax und Mini-Warenkorb scheint nicht die Preisänderung zu sehen, wenn das Produkt in den Warenkorb hinzugefügt wird . Es zeigt den ursprünglichen Preisbetrag an. Ich kann die Preise im Warenkorb selbst nicht übersteuern, aber Sie müssen auf der Warenkorb- oder Kassenseite sein, um sie zu sehen. Ich bin mir nicht sicher, welchen Ansatz ich wählen soll. Ich fühlte mich, als ob ich alles versucht hätte.Warenkorb insgesamt nicht aktualisiert mit übersteuert Warenkorb Preise

Scheint, als ob $woocommerce->cart->get_cart_total() aufgerufen wird, um aktuelle Warenkorb insgesamt anzuzeigen, aber es scheint nicht zu laufen add_action('woocommerce_before_calculate_totals', 'woo_add_discount'); Hook wenn aufgerufen. Wenn Sie auf die tatsächliche Warenkorbseite gehen, ist es die richtige Preisgestaltung.

Dieser hinzugefügte Code zeigt den richtigen Einzelpreis an, nicht jedoch die Zwischensumme. Sie müssen die Warenkorbseite aktualisieren, indem Sie auf die Warenkorb-URL klicken, um das Objekt $ woocommerce-> cart-> get_cart_total() zu aktualisieren.

Ich habe auch versucht add_action('woocommerce_before_mini_cart', 'woo_add_discount');, die das gleiche tut .. Sie müssen die Seite nach dem Laden aktualisieren. Ich bin mir sicher, dass ich nicht der Einzige bin, der die Preise außer Kraft gesetzt hat und nicht alle Probleme auf den Tisch bringen kann.

Ich habe das versucht und sehe, dass der zweite Kommentar auf die Antwort, jemand hat das gleiche Problem, aber keine Antworten. WooCommerce: Add product to cart with price override?

Antwort

0

ich das selbst Festsetzung endete zu verwenden. Ich versuchte Paul de Konings Antwort. Durch den Wechsel zu apply_filters wurden die Preise auf $ 0 gesetzt. Ich denke, das ist, weil die Reihenfolge sie gehen müssen.

Hier war meine Lösung. Die Ursache lag darin, dass ich die Funktion change price_html verwendete, um die Änderungspreise für den Einkaufswagen anzugeben. Innerhalb dieser Funktion gab es add_action Aufrufe usw. Irgendwie muss es ein Bestellproblem gegeben haben. Dies ist ein mehrstufiger Prozess, um sicherzustellen, dass alle Bereiche korrekt ausgeführt werden.

Wenn Sie WooCommerce Preise zu ändern, ohne Sitzungen mit dem geänderten Preis für den Wagen zu speichern, während die Anzeige Preis ändern und Preise versteckt, führen in etwa wie folgt:

functions.php

add_action('woocommerce_get_price_html','special_price'); 

    function special_price($price) { 

     //put any if statements for hiding the cart button and discounting pricing below and return true or false 
     $displayprice = true; 
     $alterprice = true; 

     if($displayprice === true) { 

     add_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10, 2); 
     add_action('init', 'woocommerce_add_to_cart_action', 10); 
     add_action('init', 'woocommerce_checkout_action', 10); 

     } else { 

     remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10, 2); 
     remove_action('woocommerce_before_add_to_cart_form', 'woocommerce_template_single_product_add_to_cart', 10, 2);  // 
     remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10); 
     remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); 

     //return blank or something like 'Signup to view price' 
     return ''; 

     } 

     //if you are displaying the price (altered) 
     if($displayprice === true && $alterprice === true){ 

     $price = price_manipulator($theid); 
     return $price; 

     //display add to cart and price 

     } 

     //if you are displaying the price (unaltered) 
     return $price  

    } 


    function price_manipulator($theid = '') { 

     if(empty($theid)){ 
     $theid = get_the_ID(); 
     } 

     $product = wc_get_product($theid); 

     //30% off example 
     $newprice = floatval($product->price * (1-0.3)); 

     return $newprice; 
    } 

    /*version of pricing if you are adding something to cart*/ 
    function special_price_cart($theid){ 

       $price = price_manipulator($theid);    

       return $price; 

    } 


    add_action('woocommerce_before_calculate_totals', 'woo_add_discount'); 
    add_action('woocommerce_before_mini_cart', 'woo_add_discount'); //this is if you are using the mini-cart woocommerce widget 

    function woo_add_discount() { 

     global $woocommerce;  

     //create if statements same as if you were displaying the price 
     $displayprice = true; 


     if($displayprice === true){ 

     foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 

      $price = special_price_cart($cart_item['data']->id); 
      $price = str_replace('$','',$price); 
      $price = str_replace(',','',$price);    


      if($price > 0){ 

      $cart_item['data']->price = floatval($price); 

      }  

     } 

    } 

    } 
1

Try apply_filters statt add_action

Verwandte Themen