WooCommerce: Bestellung nachträglich bearbeiten

Manchmal möchte man mittels PHP eine Bestellung in WooCommerce bearbeiten, immer dann, wenn die Bestellung aktualisiert wird, oder gerade angelegt wurde. Dafür hat WooCommerce zwei Hooks, die wir nutzen können. In unserem Beispiel tippen Kunden ihre Hausnummer gerne in das Feld für den Adresszusatz ein. Also wollen wir diesen Zusatz, hinter die Straße packen, sofern die Straße keine Zahl enthält.

Bestellung nach Aktualisierung bearbeiten

Um eine Bestellung nach einer Aktualisierung anzupassen, sprechen wir die woocommerce_update_order an. Diese wird immer dann platziert, wenn eine Bestellung aktualisiert wurde. Eine Bestellung, die gerade angelegt wurde, wird damit nicht angesteuert!

/**
 * @param int      $order_id
 * @param WC_Order $order
 */
function pixelbart_woocommerce_update_order($order_id, $order)
{
   $billing_1 = $order->get_billing_address_1();
   $billing_2 = $order->get_billing_address_2();

   $changes = [];

   // Rechnungsanschrift
   if (!preg_match('~[0-9]+~', $billing_1) && is_numeric($billing_2)) {
       $billing_1 = sprintf('%s %s',  $billing_1, $billing_2);
       $order->set_billing_address_1($billing_1);
       $changes[] = 'billing_1';
   }

   // Lieferanschrift
   $shipping_1 = $order->get_shipping_address_1();
   $shipping_2 = $order->get_shipping_address_2();

   if (!preg_match('~[0-9]+~', $shipping_1) && is_numeric($shipping_2)) {
       $shipping_1 = sprintf('%s %s',  $shipping_1, $shipping_2);
       $order->set_shipping_address_1($shipping_1);
       $changes[] = 'shipping_1';
   }

   // Wenn Änderungen existieren, dann speichere die Bestellung
   if (!empty($changes)) {
       $order->save();
   }
}

add_action('woocommerce_update_order', 'pixelbart_woocommerce_update_order', 99, 2);Code-Sprache: PHP (php)

Jetzt wird geprüft, ob die Rechnungsanschrift eine Zahl enthält und im Adressfeld eine Zahl steht. Ist dem so, dann wird die Straße um die Hausnummer ergänzt.

In unserem Beispiel lassen wir das Zusatzfeld befüllt. Wir wollen nichts löschen, nur erweitern.

Bestellung beim Anlegen bearbeiten

Um eine Bestellung beim Anlegen zu bearbeiten, spricht WooCommerce die Hook woocommerce_new_order an. Im Grunde können wir diese Hook mit der obigen ersetzen und alles sollte funktionieren, wie gewollt.

/**
 * @param int      $order_id
 * @param WC_Order $order
 */
function pixelbart_woocommerce_new_order($order_id, $order)
{
    // Wie in Beispiel 1
}

add_action('woocommerce_new_order', 'pixelbart_woocommerce_new_order', 99, 2);Code-Sprache: PHP (php)