WooCommerce ist eine der beliebtesten E-Commerce-Plattformen, doch wenn es um nachträgliche Änderungen an Bestellungen geht, kommt man schnell an Grenzen.
Warum ist das ein Problem?
Häufige Probleme:
- Eine Bestellung ist abgeschlossen, aber der Kunde möchte nachträglich eine Anpassung (z. B. fehlerhafte Produktbeschreibung, falscher Preis).
- Fehlerhafte Preise oder Produktbeschreibungen müssen korrigiert werden.
- Bestellungen können im Standard-WooCommerce-Backend nicht direkt bearbeitet werden.
Rechtlich kann das problematisch sein: In vielen Ländern dürfen Bestellungen nachträglich nicht einfach geändert werden, da sie als abgeschlossener Vertrag gelten. Deshalb ist es wichtig, dass du Änderungen transparent dokumentierst.
Die Lösung: Bestellung anpassen mit unserem Plugin
Mit dem “WooCommerce Bestellung Anpassen” Plugin kannst du bestehende Bestellungen bearbeiten.
Funktionen:
✅ Manuelles Ändern von Produktbeschreibungen und Preisen innerhalb einer Bestellung.
✅ Funktioniert auch für abgeschlossene Bestellungen.
✅ Anpassung direkt in WooCommerce ohne komplizierte Workarounds.
✅ Steuerberechnung bleibt korrekt!
So funktioniert es:
- Plugin installieren
- Lade das Plugin in den WordPress-Plugin-Ordner (
/wp-content/plugins/
). - Aktiviere es in WordPress unter Plugins.
- Lade das Plugin in den WordPress-Plugin-Ordner (
- Bestellung öffnen
- Gehe zu WooCommerce → Bestellung anpassen.
- Gib die Bestellnummer ein und lade die Bestellung.
- Bearbeiten & Speichern
- Ändere den Produkttext oder den Preis.
- Speichern und WooCommerce aktualisiert automatisch die Steuer!
Der Code
Hier findest du den Code direkt zum Kopieren – oder du lädst ihn dir auf GitHub herunter (siehe unten).
<?php
/**
* Plugin Name: WooCommerce Bestellung Anpassen
* Description: Ermöglicht das Bearbeiten von Artikelbeschreibungen und Preisen in bestehenden WooCommerce-Bestellungen.
* Version: 1.0.1
* Plugin URI: https://chris-martens.com/blog/woo-bestellung-aendern
* Author: Chris Martens
* Author URI: https://chris-martens.com
*/
if (!defined('ABSPATH')) {
exit; // Sicherheit
}
// Admin-Menü hinzufügen
function chrmrtns_custom_order_editor_menu() {
add_submenu_page(
'woocommerce',
'Bestellung anpassen',
'Bestellung anpassen',
'manage_woocommerce',
'custom-order-editor',
'chrmrtns_custom_order_editor_page'
);
}
add_action('admin_menu', 'chrmrtns_custom_order_editor_menu');
// Funktionsseite rendern
function chrmrtns_custom_order_editor_page() {
if (isset($_POST['order_id']) && isset($_POST['update_order'])) {
chrmrtns_custom_update_order_items($_POST['order_id'], $_POST['items']);
}
?>
<div class="wrap">
<h2>WooCommerce Bestellung Anpassen</h2>
<form method="post">
<h3><strong>Bestellung anpassen</strong></h3>
<p><strong>Um die Bestellung anzupassen, gib die Bestellnummer ein, und lade die Bestellung.</strong></p>
<p><strong>Danach kannst du den Preis und den Bestelltext ändern.</strong></p>
<label for="order_id">Bestell-ID:</label>
<input type="number" name="order_id" required>
<input type="submit" name="load_order" value="Bestellung Laden">
</form>
<?php
if (isset($_POST['order_id']) && isset($_POST['load_order'])) {
echo '<div style="margin-top: 20px;"></div>';
$order_id = intval($_POST['order_id']);
$order = wc_get_order($order_id);
if ($order) {
echo '<form method="post">';
echo '<input type="hidden" name="order_id" value="' . esc_attr($order_id) . '">';
echo '<table><tr><th>Produkt</th><th>Preis</th><th>Neue Beschreibung</th></tr>';
foreach ($order->get_items() as $item_id => $item) {
$product = $item->get_product();
echo '<tr>';
echo '<td>' . ($product ? esc_html($product->get_name()) : '<em>Produkt nicht gefunden</em>') . '</td>';
echo '<td><input type="text" name="items[' . esc_attr($item_id) . '][price]" value="' . esc_attr($item->get_total()) . '" style="width: 100px;"></td>';
echo '<td><input type="text" name="items[' . esc_attr($item_id) . '][name]" value="' . ($product ? esc_attr($product->get_name()) : '') . '" style="width: 300px; margin-right: 10px;"></td>
<td><input type="submit" name="update_order" value="Speichern" style="padding: 5px 15px; font-weight: bold;"></td>';
echo '</tr>';
}
echo '</table>';
echo '</form>';
} else {
echo '<p>Bestellung nicht gefunden.</p>';
}
}
?>
</div>
<?php
}
// Bestellung aktualisieren
function chrmrtns_custom_update_order_items($order_id, $items) {
$order = wc_get_order($order_id);
if (!$order) return;
foreach ($items as $item_id => $data) {
if (!empty($data['price'])) {
$new_price = floatval($data['price']);
$product_id = wc_get_order_item_meta($item_id, '_product_id', true);
$product = wc_get_product($product_id);
if ($product) {
$tax_class = $product->get_tax_class();
$tax_rates = WC_Tax::get_rates($tax_class);
$taxes = WC_Tax::calc_tax($new_price, $tax_rates, true);
$tax_amount = array_sum($taxes);
$net_price = $new_price - $tax_amount;
} else {
$net_price = $new_price;
$tax_amount = 0;
}
wc_update_order_item_meta($item_id, '_line_total', $net_price); // Netto-Preis
wc_update_order_item_meta($item_id, '_line_tax', $tax_amount); // Steuerbetrag
wc_update_order_item_meta($item_id, '_line_subtotal', $net_price + $tax_amount); // Brutto-Preis
}
if (!empty($data['name'])) {
wc_update_order_item_meta($item_id, '_product_id', sanitize_text_field($data['name']));
}
}
$order->calculate_totals();
echo '<p>Bestellung aktualisiert (inkl. Steuerberechnung)!</p>';
}
Gibt es Einschränkungen?
Ja, dieses Plugin ändert nur die Bestellung, nicht das Produkt im Shop. Das bedeutet, dass die geänderte Beschreibung oder der Preis nur für diese spezifische Bestellung gilt.
Falls du das Produkt global ändern willst, musst du das direkt in WooCommerce unter Produkte bearbeiten.
Fazit
Wenn du nachträglich Bestellungen in WooCommerce anpassen musst, ist unser Plugin die perfekte Lösung.
🔗 Hier herunterladen: WooCommerce Bestellung Anpassen Plugin
Hast du Fragen? Schreibe sie in die Kommentare! 🚀
Foto von Luca Bravo auf Unsplash