Ich habe erstellt die folgenden benutzerdefinierten Felder für den Anwender Meta mit dem PODS.io Wordpress-Plugin speichern:Wie WooCommerce Kasse benutzerdefinierte Felder Benutzer meta
- DATE_OF_BIRTH
- emergency_contact_name
- Beziehung
- emergency_phone
Ich habe diese Felder zum WooCommerce Checkout hinzugefügt, unter zusätzliche Informationen, durch mein Thema ist mit dem folgenden Code in functions.php
:
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field($checkout) {
woocommerce_form_field('date_of_birth', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Date of Birth'),
'placeholder' => __('dd/mm/yyyy'),
), $checkout->get_value('date_of_birth'));
woocommerce_form_field('emergency_contact_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Emergency Contact Name'),
'placeholder' => __('contact name'),
), $checkout->get_value('emergency_contact_name'));
woocommerce_form_field('relation', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Emergency Relation'),
'placeholder' => __('wife/husband'),
), $checkout->get_value('relation'));
woocommerce_form_field('emergency_phone', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Emergency Phone'),
'placeholder' => __('xxxx xxx xxx/xxxx xxxx'),
), $checkout->get_value('emergency_phone'));
}
Fehlerprüfung:
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if (! $_POST['date_of_birth'])
wc_add_notice(__('Please enter your date of birth'), 'error');
if (! $_POST['emergency_contact_name'])
wc_add_notice(__('Please enter your Emergency Contact Name'), 'error');
if (! $_POST['relation'])
wc_add_notice(__('Please enter how your Emergency Contact is related to you'), 'error');
if (! $_POST['emergency_phone'])
wc_add_notice(__('Please enter the phone number of your Emergency Contact'), 'error');
}
(hoffentlich) aktualisieren, um den Benutzer meta auf der Kasse:
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_order_meta($order_id) {
if (!empty($_POST['date_of_birth'])) {
$dob = sanitize_text_field($_POST['date_of_birth']);
update_user_meta($current_user->ID, 'date_of_birth', $dob);
}
if (! empty($_POST['emergency_contact_name'])) {
update_user_meta($user_id, 'emergency_contact_name', sanitize_text_field($_POST['emergency_contact_name']));
}
if (! empty($_POST['relation'])) {
update_user_meta($user_id, 'relation', sanitize_text_field($_POST['relation']));
}
if (! empty($_POST['emergency_phone'])) {
update_user_meta($user_id, 'emergency_phone', sanitize_text_field($_POST['emergency_phone']));
}
}
Leider Die benutzerdefinierten Benutzermetadatenfelder werden beim Auschecken nicht aktualisiert.
kann ich die um meta benutzerdefinierten Felder mit dem folgenden Code aktualisieren:
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 (! empty($_POST['date_of_birth'])) {
update_post_meta($order_id, 'Date Of Birth', sanitize_text_field($_POST['date_of_birth']));
}
if (! empty($_POST['emergency_contact_name'])) {
update_post_meta($order_id, 'Emergency Contact Name', sanitize_text_field($_POST['emergency_contact_name']));
}
if (! empty($_POST['relation'])) {
update_post_meta($order_id, 'Emergency Relation', sanitize_text_field($_POST['relation']));
}
if (! empty($_POST['emergency_phone'])) {
update_post_meta($order_id, 'Emergency Phone', sanitize_text_field($_POST['emergency_phone']));
}
}
Allerdings müssen wir die benutzerdefinierten Felder in dem Benutzer meta, nicht die Reihenfolge Meta.
Können Sie sehen, was mit dem Code falsch ist, der benutzerdefinierte Felder beim Auschecken an den Benutzer Meta speichert?
Danke. (Verwendung woocommerce_checkout_fields
Filter)
function reigel_woocommerce_checkout_fields($checkout_fields = array()) {
$checkout_fields['order']['date_of_birth'] = array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Date of Birth'),
'placeholder' => __('dd/mm/yyyy'),
'required' => true,
);
return $checkout_fields;
}
add_filter('woocommerce_checkout_fields', 'reigel_woocommerce_checkout_fields');
Hinzufügen 'required'
und wenn er zu true
haben den gleichen Effekt mit, wie Sie überprüfen, ob dieses Feld gesetzt ist oder nicht:
$ userid ist in Ihrem Beispiel nicht definiert – David