Es ist ein wenig vage, was Sie fragen, weil die Änderung des HTML-Preises den Produktpreis selbst nicht ändert.
- Sie benötigen ein eigenes Eingabefeld für den Text hinzufügen, die graviert werden muss
- Sie dann in den Warenkorb auf den Haken benötigen und fügen Sie dieses benutzerdefinierte Feld Wert auf das Produkt
- Sie muss den Gesamtpreis berechnen, indem gezählt wird, wie viele Zeichen vorhanden sind, sobald das Produkt dem Einkaufswagen hinzugefügt wird.
- 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.
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
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
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