2017-06-10 5 views
0

Ich habe eine Ajax-Kasse auf meiner Woocommerce-Installation und ich versuche, die benutzerdefinierten Felder an der Kasse zu erfassen. Ich verwende den folgenden Code, um das Feld namens add_gift_box zu erfassen. Das Feld erscheint auf meiner Checkout-Seite einwandfrei.Wie benutzerdefinierte Checkout-Felder in Ajax Checkout in woocommerce haben

 add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta'); 

function my_custom_checkout_field_update_order_meta($order_id) { 
    if ($_POST['add_gift_box']) { 
     update_post_meta($order_id, '_add_gift_box', esc_attr($_POST['add_gift_box'])); 
    } 
} 

Wenn ich drücke auf „Bestellung“, um eine neue Ordnung schafft, sondern den Wert dieses Feldes erhalten nicht in der Datenbank gespeichert. Ich glaube nicht einmal der Haken wird gefeuert. Wie gesagt, alles wird von Ajax gehandhabt. Die Checkout-Seite ist eine Seite zum Auschecken.

Ich brauche Hilfe beim Aussortieren. Danke im Voraus.

UPDATE

ich das Feld setze wie folgt:

add_action('woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout'); 

function add_box_option_to_checkout($checkout) { 
    woocommerce_form_field('add_gift_box', array(
     'type'   => 'radio', 
     'class'   => array('add_gift_box form-row-wide'), 
     'label_class'   => array('checkbox'), 
     'input_class'   => array('input-checkbox'), 
      'required'  => true, 
      'options' => array(
       'option_1' => 'option1</br>' , 
       'option_2' =>'option2</br>', 
       'option_3' =>'option3</br>', 
       'option_4' =>'option4</br>', 
       'option_5' =>'option5</br>', 
       'option_6' =>'option6</br>', 
       'option_7' =>'option7</br>', 
      ), 
     'label'   => __('Select Option'), 
     'placeholder' => __(''), 
     ), $checkout->get_value('add_gift_box')); 


} 
+0

sollten Sie etwas verwenden wie: 'if (! Empty ($ _POST ['add_gift_box'])) {' ... Da wir nicht wissen, wie Sie dieses benutzerdefinierte Feld einstellen, ist schwer herauszufinden, was schief geht und zu Probier es aus. Siehe offizielle Dokumentation: https://docs.woocommerce.com/document/tutorial-customizing-checkout-fields-using-actions-and-filters/ – LoicTheAztec

+0

Ich habe gerade die Frage mit der Art und Weise aktualisiert, wie das Feld eingestellt wird. – Ricky

+0

Ihr Code scheint in Ordnung zu sein. Hast du die add_action für woocommerce_checkout_update_order_meta in der functions.php deines Themes oder vielleicht in einer anderen Datei oder in einem Codeblock platziert, wo sie zu spät oder gar nie geparst wird? –

Antwort

0

hier ist ein Plugin, benutzerdefiniertes Feld auf Kasse Seite Woocommerce https://wordpress.org/plugins/woo-custom-checkout-field/

oder wenn Sie mit dem Code hinzufügen möchten hinzufügen, die Sie kann von hier aus folgen

https://www.cloudways.com/blog/custom-field-woocommerce-checkout-page/

add_action ('woocommerce_after_order_notes', 'customise_checkout_field');

function customise_checkout_field($checkout) 
{ 
    echo '<div id="customise_checkout_field"><h2>' . __('Heading') . '</h2>'; 
    woocommerce_form_field('customised_field_name', array(
     'type' => 'text', 
     'class' => array(
      'my-field-class form-row-wide' 
     ) , 
     'label' => __('Customise Additional Field') , 
     'placeholder' => __('Guidence') , 
     'required' => true, 
    ) , $checkout->get_value('customised_field_name')); 
    echo '</div>'; 
} 
+0

Also, ich habe bereits das Feld an der Kasse hinzugefügt und es zeigt sich gut. Ich denke, das Problem ist mit der Ajax-Kasse. Wenn jemand auf die Schaltfläche "order order" klickt, wird der Haken "woocommerce_checkout_update_order_meta" überhaupt nicht ausgelöst. Ich bin mir nicht sicher warum. Ist es auch möglich zu debuggen, wenn ein Hook überhaupt ausgelöst wird? – Ricky

+0

Die Frage wurde nur mit dem Code aktualisiert, den ich verwende, um das Feld festzulegen. – Ricky

0

Haben Sie ein Plugin aktiviert, die den Auftrag durch Einhaken in woocommerce_create_order Filter erzeugt? Ich sehe keinen anderen Grund, warum add_gift_box nicht gespeichert wird oder warum woocommerce_checkout_update_order_meta nicht feuert.

Der ursprüngliche Code von includes/Klasse-WC-checkout.php

/** 
    * Action hook to adjust order before save. 
    * @since 3.0.0 
    */ 
    do_action('woocommerce_checkout_create_order', $order, $data); 

    // Save the order. 
    $order_id = $order->save(); 

    do_action('woocommerce_checkout_update_order_meta', $order_id, $data); 

So ist, können Sie Protokolldateien in Ihrem Themen Verzeichnis erstellen können, die Haken zu sehen sind, wie dies Brennen:

add_action('woocommerce_checkout_update_order_meta', function ($order_id) { 
    file_put_contents(__DIR__ . '/woocommerce_checkout_update_order_meta.log', 'woocommerce_checkout_update_order_meta fired for order id ' . $order_id); 
}); 
add_action('woocommerce_checkout_create_order', function() { 
    file_put_contents(__DIR__ . '/woocommerce_checkout_create_order.log', 'woocommerce_checkout_create_order fired'); 
}); 
+0

Ich bin mir nicht sicher, was Sie mit dem Aktivieren des Plugins gemeint haben. Der Code ist bereits in functions.php für dieses spezielle Thema. Es ist also kein Plugin. Ich habe versucht, Ihren Code zu verwenden, und als ich auf "Place Order" geklickt habe, habe ich überhaupt keine Log-Datei erstellt. Ich nehme also an, dass die zwei Haken nicht gefeuert wurden. Ich bin jetzt stecken :( – Ricky

+0

Meine andere Ahnung ist, dass, da die Website eine Ajax-Kasse verwendet, es diese Haken nicht feuert. Ich bin mir nicht sicher, ob das wahr sein könnte oder nicht. – Ricky

+0

Was ich meinte, ist ein Drittanbieter-Plugin . Das create_order Verfahren, bei dem die sollten die beiden Haken beginnt mit diesen Zeilen feuern. \t \t // geben Sie die Möglichkeit, Plugins ein, um sich \t \t if ($ order_id = apply_filters ('woocommerce_create_order', null, $ this zu erstellen)) { \t \t \t return $ order_id; \t \t} Also, wenn es ein Plugin in woocommerce_create_order Einhaken und eine Order_ Rückkehr id, WhoCommerce create_order wird praktisch überschrieben und die Hooks werden nicht ausgelöst, wenn sie nicht vom Plugin implementiert werden. Sie können dies testen, indem Sie alle Plugins deaktivieren, die den Checkout beeinflussen könnten. –

Verwandte Themen