Speichern Sie den benutzerdefinierten Feldwert für die Kasse und zeigen Sie ihn in WooCommerce-Administratoraufträgen an
Ich habe einige zusätzliche Felder in meiner Kasse, in denen ich dem Kunden Fragen zu bestimmten Dingen bezüglich seiner Bestellung stellen kann. Die meisten davon sind Texteingabefelder, aber es gibt ein Auswahlmenü, in dem sie gefragt werden, wie sie von der Website meines Kunden erfahren haben. Ich konnte nicht herausfinden, wie der Wert im Metabereich der Bestellung für die ausgewählte Option angezeigt wird. So generiere ich diese Auswahl-Dropdown-Liste in meiner Datei functions.php aus meinem Thema.
woocommerce_form_field( 'aba_hear', array(
'type' => 'select',
'required' => 'true',
'class' => array('hear-class form-row-wide'),
'label' => __('How did You Hear About Us?'),
'options' => array( // options for <select> or <input type="radio" />
'' => 'Please select', // empty values means that field is not selected
'Instagram' => 'Instagram',
'Facebook' => 'Facebook',
'Yelp' => 'Yelp',
'Other' => 'Other',
)
), $checkout->get_value( 'aba_hear' ) );
Jetzt füge ich eine Funktion hinzu, um die Metawerte der Bestellung zu aktualisieren:
add_action( 'woocommerce_checkout_update_order_meta', 'aba_checkout_field_update_order_meta' );
function aba_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['aba_hear'] ) ) { update_post_meta( $order_id, 'How did You Hear About Us?', sanitize_text_field( $_POST['aba_hear'] ) );
}
}
Und schließlich den Wert auf der Bestellseite anzeigen:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('How did You Hear About Us?').':</strong> ' . get_post_meta( $order->id, 'Is this a Gift?', true ) . '</p>';
}
Zuletzt wird der Code des Auswahlmenüs an der Kasse wie folgt angezeigt:
<p class="form-row hear-class form-row-wide validate-required" id="aba_hear_field" data-priority="">
<label for="aba_hear" class="">How did You Hear About Us? <abbr class="required" title="required">*</abbr></label>
<span class="woocommerce-input-wrapper">
<select name="aba_hear" id="aba_hear" class="select " data-allow_clear="true" data-placeholder="Please select">
<option value="" selected='selected'>Please select</option>
<option value="Instagram" >Instagram</option>
<option value="Facebook" >Facebook</option>
<option value="Yelp" >Yelp</option>
<option value="Other" >Other</option>
</select>
</span>
</p>
Dies funktioniert nun gut für Texteingabefelder, aber nicht für ausgewählte Menüs. Wie kann ich dies ändern, damit es funktioniert, damit ich die resultierenden Daten anzeigen kann?
Antworten
In einigen Ihrer Funktionen sind einige Fehler aufgetreten. In den folgenden Funktionen müssen Sie denselben Checkout-Feldschlüssel wie den Metaschlüssel verwenden:
In der zweiten Funktion verwenden Sie einen anderen Hook und speichern ein benutzerdefiniertes Feld auch als Benutzer-Metadaten:
add_action( 'woocommerce_checkout_create_order', 'aba_checkout_field_update_order_meta' );
function aba_checkout_field_update_order_meta( $order ) { if ( isset($_POST['aba_hear']) && ! empty($_POST['aba_hear']) ) { $order->update_meta_data( '_aba_hear', sanitize_text_field( $_POST['aba_hear'] ) ); // Update user data if( $order->get_user_id() > 0 ) {
update_user_meta( $order->get_user_id(), 'aba_hear', true );
}
}
}
Verwenden Sie in der 3. Funktion Folgendes:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta( $order ){
$value = $order->get_meta( '_aba_hear' );
if ( ! empty($value) ) { echo '<p><strong>'.__('How did You Hear About Us?').':</strong> ' . $value . '</p>';
}
}
Es sollte jetzt besser funktionieren.
Anmerkungen:
Warum dieses Checkout-Feld auch als benutzerdefinierte Benutzer-Metadaten speichern?
Denn in Ihrer ersten Funktion
$checkout->get_value( 'aba_hear' )
wird der ausgewählte Wert aus der letzten Bestellung des Kunden in diesem benutzerdefinierten Checkout-Feld angezeigt. Der Wert wird aus dem Benutzer-Meta 'aba_hear' gelesen.