Erweiterte benutzerdefinierte Felder ( ACF ) an der WooCommerce-Kaufabwicklung

Lesezeit: 3 Minuten

Benutzer-Avatar
Andreas Glover

Ich benutze die ACF-Plugin um eine Vielzahl von benutzerdefinierten Metadaten innerhalb einer WooCommerce-Website zu verwalten. Eine der Funktionen, die ich einrichten möchte, ist das Hinzufügen benutzerdefinierter Felder zur WooCommerce-Checkout-Seite. Ich folge dem allgemeinen Konzept, das auf skizziert wurde Dokumentationsseite von WC, mit dem Sie über den Hook woocommerce_after_order_notes benutzerdefinierte Formulare an das WC-Checkout-Formular anhängen können. Von dort gebe ich das acf-Formular mit dem ein acf_form () -Funktion, wobei das Formular auf “false” gesetzt ist, damit es die ACF-Formularelemente (dh die ACF-Senden-Schaltfläche) nicht enthält. Dies scheint zu funktionieren, da ich die benutzerdefinierten ACF-Felder erfolgreich dazu bringen kann, im Checkout-Feld an der entsprechenden Stelle angezeigt zu werden.

Von dort aus versuche ich, die zu verwenden ACF update_field() Funktion in Kombination mit dem Hook woocommerce_checkout_update_order_met. Wie empfohlen mit der ACF-Community hier. Hier ist mein Code, den ich bisher in meiner Datei functions.php platziert habe:

Dieser Teil scheint zu funktionieren.

add_action( 'woocommerce_after_order_notes', 'my_custom_budgetcenter_field' ); //This runs the my_custom_budgetcenter_field funtion within the chekout form.

function my_custom_budgetcenter_field( ) { 
    echo '<div id="my_custom_budget center_field"><h2>' . __('Budget Center Field') . '</h2></div>'; // This Line Adds A header Line the the bottom of the WC Checkout Page. 
    acf_form(array('form' => false,'fields' => array('acf_selected_budget_center'))); //This line outputs the ACF form with form value set to false so its included in the woocommerce checkout form.  It then sets the fields to equal my the acf_selected_budget_center field group
}

Das ist der Teil, mit dem ich Probleme habe:

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_budgetcenter_field_update_order_meta' ); //This line runs the  my_custom_budgetcenter_field_update_order_meta when woocomerce updates the order meta when submiting the form.

function my_custom_budgetcenter_field_update_order_meta( $order_id ) { 
        $valueofbc = get_field( "field_5c005d0c5f829" );
        $bcfieldkey = "field_5c005d0c5f829";
        update_field( $bcfieldkey, $valueofbc, $order_id  );
    
} ;

Wenn ich die Zeichenfolge $valueofbc manuell setze (Beispiel: $valueofbc = "001 - Activities" ; ) funktioniert alles. Ich kann eine Bestellung aufgeben und dieses Feld wird mit der fest codierten Zeichenfolge aktualisiert. Wenn ich es jedoch auf setze get_field Funktionsoption so, dass es das benutzerdefinierte ACF-Feld (einen ausgewählten Wert) verwendet, speichert es den Wert nicht. Nach einigem Graben sieht es so aus, als müsste ich einstellen acf_form_head() über der WordPress-Funktion get_header() auf der Checkout-Seitenvorlage, damit ACF die Daten abrufen und veröffentlichen kann. Wenn ich dies jedoch getan habe und den Checkout-Prozess durchlaufe und dann auf der Checkout-Seite von woocomerce auf „Bestellung absenden“ klicke, erhalte ich die JavaScript-Benachrichtigung „Website verlassen? – Von Ihnen vorgenommene Änderungen können nicht gespeichert werden“ – Verlassen – Abbrechen“. Die Seite versucht, die Bestellung zu verarbeiten. Wenn ich auf “Verlassen” klicke, wird die Bestellbestätigungsseite aufgerufen, aber der Metawert wird nicht gespeichert. Wenn ich auf “Abbrechen” klicke, dreht sich der Bestellprozessor nur endlos und aktualisiert die Seite nie.

An diesem Punkt bin ich mit meinem Latein am Ende, wenn ich versuche, das zum Laufen zu bringen. Ich muss ACF wegen einer fortgeschrittenen bedingten Logik für die Anzeige und die Art und Weise verwenden, wie Daten mit anderen Daten in anderen Formularen funktionieren. Die Verwendung eines einfachen Checkout-Formular-Add-on-Plugins ist also keine Option. Außerdem kann der Support von ACF mehrere Wochen dauern, weshalb ich hier poste. Jede Hilfe wäre sehr willkommen.

Vielen Dank,

Herausgefunden. Die Funktion acf_form_head() ist eine Kombination aus mehreren Aktionen. Eine dieser Aktionen (acf/submit_form) enthält eine Umleitungsfunktion, die beim Senden über ein anderes Formular offensichtlich nicht funktioniert. Die Lösung besteht darin, die Aktion acf/save_post anstelle von submit_form zu verwenden.

  • Könnten Sie den Code posten, mit dem Sie das zum Laufen gebracht haben? Mir ist nicht klar, wo oder wie Sie aktualisiert haben, welche Aktion „acf_form_head“ „acf/save_post“ anstelle von „acf/submit_form“ verwenden soll.

    – Benjamin

    3. Februar 2019 um 7:26 Uhr

1228810cookie-checkErweiterte benutzerdefinierte Felder ( ACF ) an der WooCommerce-Kaufabwicklung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy