2016-11-15 3 views
0

I Problem haben folgende: orders pageKontaktformular 7 + WooCommerce - Speichern von Formulardaten in Befehle

Ich habe ein Kontaktformular 7 mit 2 Drop-Down-Optionen für die Tickets für eine Veranstaltung der Bestellung ohne User-Registrierung. Dies funktioniert gut, aber es speichert keine Formulardaten auf der "Bestellungen" -Seite von woocommerce wie das enthaltene Bild, was die Nachverfolgung von Bestellungen schwierig macht. In weiteren Einstellungen des Kontaktformular folgend Ich habe:

on_sent_ok: "switch(document.forms[0].elements["registration_type"].value){case "Normal Registration": location.replace('url/checkout-3/?clear-cart&add-to-cart=325&quantity=1');break;case "Presenter Registration": location.replace('url/checkout-3/?clear-cart&add-to-cart=327&quantity=1');break;};" 

die die Reihenfolge um WooCommerce fügt aber ich brauche Kundendaten wie Namen Adresse und E-Mail zu. Leider bin ich mit dieser Art von Code noch nicht effizient, kann mich jemand in die richtige Richtung stoßen?

Vielen Dank im Voraus!

+0

, warum Sie einen CF7 verwenden Sie ein Produkt für die Bestellung ? Du scheinst das vom falschen Ende zu nehmen. Bitte erläutern Sie, was Sie erreichen möchten. – vard

+0

Der CF7 speichert die Formulardaten in der Kontaktformular-DB, die später in den CSV-Export exportiert werden kann. on_sent fügt das Produkt in Woocommerce Checkout ein, um dann die ebenfalls angeforderte wirecard zu verwenden. Der fehlende Schritt besteht darin, Felddaten von CF7 zu speichern und in die Auftragsübersicht von woocommerce einzufügen. – AaronK

+0

Ich sehe. Was Sie im Grunde tun müssen, ist 'wpcf7_mail_sent' anzuhängen, um die Formulardaten in der Sitzung zu speichern, und sie später in benutzerdefinierten Feldern zu speichern, wenn die Bestellung erstellt wird (mit der Aktion 'woocommerce_checkout_order_processed') und diese auf der Bestellseite mithilfe von Meta-Boxen anzuzeigen. Wenn Sie nicht wissen, wie ich vorgehen soll, werde ich eine Antwort aussprechen. – vard

Antwort

1

Zuerst können Sie Ihre CF7-Daten in Sitzung speichern, um sie später bei Ihrer Bestellung zu speichern (in Anbetracht der Tatsache, dass die Bestellung zu diesem Zeitpunkt noch nicht erstellt wurde). Sie können die Aktion wpcf7_mail_sent verwenden, die beim Senden der E-Mail ausgelöst wird. Bitte beachten Sie, dass der folgende Code in Ihrem Theme functions.php stattfindet.

function wc_wpcf7_mail_sent_function($contact_form) { 
    $submission = WPCF7_Submission::get_instance(); 
    if($submission) { 
     $posted_data = $submission->get_posted_data(); 
     WC()->session->set('cf7_posted_data', $posted_data); 
    } 
} 
add_action('wpcf7_mail_sent', 'wc_wpcf7_mail_sent_function'); 

Diese nutzen die WooCommerce Session-Klasse WC_Session.

dann die Daten in benutzerdefinierten Feldern speichern, wenn die Bestellung bearbeitet wird:

function wc_save_cf7_data_to_order($order_id) { 
    $posted_data = base64_encode(serialize(WC()->session->get('cf7_posted_data'))); 
    if(!empty($posted_data)) { 
     add_post_meta($order_id, 'cf7_posted_data', $posted_data); 
     WC()->session->__unset('cf7_posted_data'); 
    } 
} 
add_action('woocommerce_checkout_order_processed', 'wc_save_cf7_data_to_order', 10, 1); 

Diese alle CF7 Formulardaten in einer serialisierten String speichern wird, in base64 gespeichert jede Decodierung Problem zu vermeiden.

Last, benötigen Sie ein meta box hinzufügen, um die Formulardaten auf der Bestellseite zeigen:

function wc_add_meta_box() { 
    add_meta_box(
     'order_tickets', 
     __('Contact form data', 'your-theme'), 
     'wc_print_order_cf7_data_callback'), 
     'shop_order' 
    ); 
} 
add_action('add_meta_boxes', 'wc_add_meta_box'); 

dann die Daten anzeigen:

public function print_order_tickets_callback($post) { 
    $posted_data = get_post_meta($post->ID, 'cf7_posted_data', true); 
    if(!empty($tickets)) { 
     $posted_data = unserialiaze(base64_decode($posted_data)); 
     foreach($posted_data as $key => $data) { 
      echo '<b>', $key, ' : </b> ', $data, '<br />'; 
     } 
    } 
} 
+0

Wie kann ich diese Funktionalität auf ein Formular beschränken? – FDI

Verwandte Themen