2017-05-18 9 views
2

Hallo heute, ich arbeitete mit woo-Commerce und ich habe erfolgreich einige benutzerdefinierte Checkout-Felder nach Benutzeranforderungen erstellt, aber ich kann sie nicht in der Datenbank speichern.woocommerce_checkout_update_order_meta Aktion funktioniert nicht

hier, wie ich benutzerdefinierte Kasse Felder erstellt ... seine in der Kinder Thema functions.php

add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 
// Over Ridding, Removing, Creating New Fields. 
function custom_override_checkout_fields($fields) { 
    unset($fields['billing']['billing_company']); 
    unset($fields['billing']['billing_address_2']);  
    unset($fields['order']['order_comments']); 
    unset($fields['billing']['billing_address_1']); 
    unset($fields['billing']['billing_city']); 
    unset($fields['billing']['billing_postcode']); 
    unset($fields['billing']['billing_email']); 


    $fields['billing']['your_name'] = array(
    'type'  => 'text', 
    'label'  => __('Full Name', 'woocommerce'), 
    'placeholder' => _x('Full Name', 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    $fields['billing']['your_phone_number'] = array(
    'type'  => 'text', 
    'label'  => __('Your Phone Number', 'woocommerce'), 
    'placeholder' => _x('Your Phone Number', 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    $fields['billing']['recipient_name'] = array(
    'type'  => 'text', 
    'label'  => __("Recipient's Name", 'woocommerce'), 
    'placeholder' => _x("Recipient's Name", 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    $fields['billing']['recipient_company_name'] = array(
    'type'  => 'text', 
    'label'  => __("Recipient's Company (if any)", 'woocommerce'), 
    'placeholder' => _x("Recipient's Company (if any)", 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    $fields['billing']['recipient_phone_number'] = array(
    'type'  => 'text', 
    'label'  => __("Recipient's Phone Number", 'woocommerce'), 
    'placeholder' => _x("Recipient's Phone Number", 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    $fields['billing']['recipient_address'] = array(
    'type'  => 'text', 
    'label'  => __("Recipient's Address", 'woocommerce'), 
    'placeholder' => _x("Recipient's Address", 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true 
    ); 

    return $fields; 
} 

In db, wo ich für die Felder suchen. seine wp_postmeta Tabelle. Beigefügt ist Screenshot Ich suche mit Bestell-ID .. wp_postmeta db table

Jetzt habe ich fügen Sie die checkout_update_order_meta Aktion die Reihenfolge meta zu aktualisieren und speichern meine benutzerdefinierten angelegte Felder. Aber es scheint, dass es nicht funktioniert, weil, wenn ich einchecke wp_postmeta Tabelle mit der neuesten erstellten Bestell-ID finde ich meine benutzerdefinierten Felder dort nicht.

Es ist mein erster Umgang mit Woocommerce-Code ich suchte viel und kam hierher, als ich aufgeben. Bitte hilf mir, dieses Geheimnis zu lösen.

Bitte korrigieren Sie mich, was ich falsch mache. Auch nach diesem Schritt muss ich diese benutzerdefinierten Felder im Wordpress-Dashboard unter woocommerce> orders> order details anzeigen, wenn es also einen nützlichen Link dafür gibt.

Vielen Dank im Voraus.

Antwort

2

Ich habe nur ein bisschen Ihre letzte süchtig Funktion geändert und es funktioniert (auf WC-Version 2.6.x und 3.0+). Es ist besser mit PHP-Funktion Variablen zu verwenden (Retro-kompatibel sein).
ist auch besser update_post_meta() statt add_post_meta() zu verwenden, da diese Funktion dafür sorgen, dass die meta_key bereits existiert und wenn nicht, add_post_meta() stattdessen ... von

Hier ein Screenshot aufgerufen werden die wp_postmeta Tabelle in die Meta-Daten, um im Zusammenhang: wp_postmeta table

Wenn die meta_key nicht durch einen Unterstrich wie hier starten, es erscheint in der Backend-Reihenfolge bearbeitet Seite in den benutzerdefinierten Feldern Metabox: enter image description here

Hier ist dieser Code:

add_action('woocommerce_checkout_update_order_meta', 'saving_checkout_cf_data'); 
function saving_checkout_cf_data($order_id) { 

    $recipient_address = $_POST['recipient_address']; 
    if (! empty($recipient_address)) 
     update_post_meta($order_id, 'recipient_address', sanitize_text_field($recipient_address)); 

    $recipient_phone_number = $_POST['recipient_phone_number']; 
    if (! empty($recipient_phone_number)) 
     update_post_meta($order_id, 'recipient_phone_number', sanitize_text_field($recipient_phone_number)); 

} 

-Code geht in die function.php-Datei Ihres aktiven untergeordneten Themas (oder Themas) oder auch in eine beliebige Plugin-Datei.

Wenn Sie einen meta_key Ausgang von _billing… wie klassischen Abrechnung Kasse Felder haben wollen, müssen Sie nur die Funktion in update_post_meta() ändern.Zum Beispiel:

update_post_meta($order_id, '_billing_recipient_address', sanitize_text_field($recipient_address)); 

Aber in diesem Fall, wird dies nicht in den benutzerdefinierten Feldern metabox in der Reihenfolge bearbeitet Seite angezeigt werden.

+1

Es funktionierte wie ein Champion, so dass das einzige falsche Ding verschachtelte Funktion war. if (! empty ($ _ POST ['PROBLEM WENN ICH NICHT ALS NESTED-FUNKTION ARBEITET'])); DANKE A LOT MATE CODE ARBEITEN WIE EIN CHAMP AUCH SIE ÖFFNET MEINEN VERSTAND ZU MEHREREN ANDEREN DINGEN –

+1

Sie können auch immer ** 'update_post_meta()' ** verwenden, da 'add_post_meta()' darin enthalten ist ... – LoicTheAztec

+0

Ich werde mich darum kümmern die Dinge, die Sie erwähnt haben, aber es gibt ein anderes Problem, dass, wie ich die benutzerdefinierten Feldinformationen im Wordpress-Dashboard im Bestellmenü anzeigen werde? Können Sie helfen? –

Verwandte Themen