WooCommerce Bestellungen nachträglich anpassen: So geht’s!

Custom Code - Woo Bestellung ändern

Übersicht

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:

  1. Plugin installieren
    • Lade das Plugin in den WordPress-Plugin-Ordner (/wp-content/plugins/).
    • Aktiviere es in WordPress unter Plugins.
  2. Bestellung öffnen
    • Gehe zu WooCommerce → Bestellung anpassen.
    • Gib die Bestellnummer ein und lade die Bestellung.
  3. 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

Weitere Beiträge

Custom Code - Woo Bestellung ändern

WooCommerce Bestellungen nachträglich anpassen: So geht’s!

Reading Time: 4:36 min

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: Rechtlich kann das…

Zum Beitrag
Fehler in der php.ini

Php übernimmt Einstellungen nicht?

Reading Time: 1:37 min

Hast du deine Einstellungen in der php.ini geändert, aber diese wollen partout nicht übernommen werden? Eventuell hast du einen Fehler in der php.ini WordPress benötigt höhere Upload Limits In der…

Zum Beitrag
Shared Hosting vs. Dedicated Server

Hosting: Shared vs eigener Server

Reading Time: 16:17 min

Shared Hosting und eigene Server unterscheiden sich in vielen Aspekten grundlegend voneinander. Beim Shared Hosting teilen sich mehrere Websites die Ressourcen eines Servers, was zu niedrigeren Kosten führt, aber auch…

Zum Beitrag

Hinterlasse einen Kommentar