2017-05-10 13 views
2

Ich arbeite an einer WordPress-Website mit WooCommerce-Funktionalität.Wie kann ich die `get_price_html()` Funktion manipulieren?

Ich habe ein benutzerdefiniertes Feld erstellt, das auf den Produktseiten angezeigt wird, sodass Kunden ihren eigenen benutzerdefinierten Text eingeben können. Dieser benutzerdefinierte Text wird dann in das zugehörige Produkt eingraviert, wobei mein Kunde £ 2 pro eingegebenem Brief berechnen möchte. Mein Kunde hat auch verlangt, dass der Produktpreis in Echtzeit aktualisiert wird, wenn ein Käufer einen Brief in das benutzerdefinierte Feld eingibt/entfernt.

Daher muss ich die get_price_html() Funktion zur Ausgabe der Summe der folgenden Gleichung manipulieren:

Aktuelle Produktpreis + (Anzahl Zeichen * £ 2)

Um zu generieren die Zeichenzählung, ich habe den folgenden jQuery-Code in die Single-Produktvorlage eingegeben:

Dann zur Ausgabe die Zeichenzählung, betreten ich das nächste Bit der Codierung in die functions.php Datei:

function custom_letter_counter(){ 
    echo '<span id="letter_count"></span>'; 
} 
add_action('woocommerce_single_product_summary', 'custom_letter_counter'); 

Ist jemand in der Lage mich in der richtigen Richtung zu zeigen, wie auf den nächsten Schritt, den ich brauchen würde, um das zu tun,/Überschreibung zu manipulieren die Funktion, um die Summe der obigen Gleichung widerzuspiegeln?

Antwort

0

Es ist ein wenig vage, was Sie fragen, weil die Änderung des HTML-Preises den Produktpreis selbst nicht ändert.

  1. Sie benötigen ein eigenes Eingabefeld für den Text hinzufügen, die graviert werden muss
  2. Sie dann in den Warenkorb auf den Haken benötigen und fügen Sie dieses benutzerdefinierte Feld Wert auf das Produkt
  3. Sie muss den Gesamtpreis berechnen, indem gezählt wird, wie viele Zeichen vorhanden sind, sobald das Produkt dem Einkaufswagen hinzugefügt wird.
  4. Sie müssen dann das benutzerdefinierte Feld an die Bestelldaten anhängen, damit es später überprüft werden kann

Hier ist wie alle diese zu erreichen ...

zuerst die Texteingabe hinzufügen können:

function add_engrave_text_field() { 
    echo '<table class="variations" cellspacing="0"> 
      <tbody> 
       <tr> 
        <td class="label"><label>Engrave Text</label></td> 
        <td class="value"> 
         <label><input type="text" name="engrave_text" placeholder="Engrave Text" /> £2 per letter</label>       
        </td> 
       </tr>        
      </tbody> 
     </table>'; 
} 
add_action('woocommerce_before_add_to_cart_button', 'add_engrave_text_field'); 

Dann anhängen wir diese Reihenfolge in den Warenkorb gelegt, sobald der Benutzer den ‚in den Warenkorb‘ trifft Taste:

function save_engrave_text($cart_item_data, $product_id) { 
    if(isset($_POST['engrave_text']) && !empty($_POST['engrave_text'])) { 
     $cart_item_data[ "engrave_text" ] = esc_attr($_POST['engrave_text']);  
    } 

    return $cart_item_data; 
} 
add_filter('woocommerce_add_cart_item_data', 'save_engrave_text', 99, 2); 

Dann berechnen wir, wie viel es insgesamt mit dem Text kosten wird, die graviert werden muss:

function calculate_engrave_text_fee($cart_object) { 
    foreach ($cart_object->cart_contents as $key => $value) { 
     if(isset($value["engrave_text"])) { 
      // Get how many characters there are 
      $chars = strlen($value["engrave_text"]); 
      // Calculate the character count by 2 (£2) 
      $engrave_text_fee = $chars * 2; 
      $orgPrice = floatval($value['data']->price); 
      $value['data']->set_price($orgPrice + $engrave_text_fee); 
     } 
    } 
} 
add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99); 

(optional) Sie können den gravieren Text auf der Warenkorb/Kasse pro Produkt machen:

function render_meta_on_cart_and_checkout($cart_data, $cart_item = null) { 
    $meta_items = array(); 

    /* Woo 2.4.2 updates */ 
    if(!empty($cart_data)) { 
     $meta_items = $cart_data; 
    } 

    if(isset($cart_item["engrave_text"])) { 
     $meta_items[] = array("name" => "Engrave Text", "value" => $cart_item["engrave_text"]); 
    } 

    return $meta_items; 
} 
add_filter('woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 99, 2); 

Und schließlich werden Sie müssen die folgenden Punkte, um den gravieren Text auf E-Mails, Aufträge etc. erscheinen hinzufügen

Dies wurde von einem alten Projekt von mir kopiert und modifiziert, um Ihren eigenen Bedürfnissen zu entsprechen, also ist es nicht vollständig getestet. Debugging sollte ziemlich einfach sein, da Dokumentation auf WooCommerce reichlich vorhanden ist.

+0

Danke für Ihre Einsicht. Ich hatte bereits ein benutzerdefiniertes Eingabefeld erstellt, das die Anzahl der eingefügten Buchstaben ausgibt. Nichtsdestoweniger habe ich alle meine eigenen Anstrengungen entfernt und deins implementiert. Während das benutzerdefinierte Textfeld eingefügt wird, wirkt sich dies nicht auf den Preis selbst aus. Muss ich noch etwas hinzufügen? – Craig

+0

Ich habe die Methode 'calculate_engrave_text_fee' aktualisiert, damit sie mit der neuesten Version von WC funktioniert und alles funktioniert jetzt an meinem Ende (ich habe es selbst getestet) – adamj

+0

Danke für die weiteren Änderungen. Leider funktioniert es immer noch nicht auf der Website. Ich deaktivierte die wenigen Plugins, die ich hatte und ließ nur das WooCommerce Plugin Active, ohne Erfolg. Ich habe auch überprüft, ob ich die neueste Version von WooCommerce habe. Können Sie feststellen, dass andere Probleme vorliegen, die die Ausführung dieses Codes verhindern könnten? – Craig

Verwandte Themen