Ich habe ein neues Versandfeld mit woocommerce_checkout_fields erstellt, unter der Annahme, dass WooCommerce es automatisch als Meta -Daten speichert: < /p>
Code: Select all
// Add Shipping Email field to the Checkout page (WooCommerce automatically saves it)
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields($fields) {
$fields['shipping']['shipping_email'] = array(
'label' => __('Shipping Email', 'woocommerce'),
'placeholder' => __('E-mail please', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
'type' => 'email',
);
return $fields;
}
< /code>
Danach habe ich versucht, das Feld auf der Seite "Administratorbestelldetails" als Beschriftung mit: < /p>
anzuzeigen// Display Shipping Email as a label in Admin Order Details (before editing)
add_action('woocommerce_admin_order_data_after_shipping_address', 'display_shipping_email_admin');
function display_shipping_email_admin($order) {
$shipping_email = $order->get_meta('_shipping_email', true);
if (!empty($shipping_email)) {
echo '
[b]' . __('Shipping Email', 'woocommerce') . ':[/b] ' . esc_html($shipping_email) . '
';
} else {
echo '
[b]' . __('Shipping Email', 'woocommerce') . ':[/b] (empty)
';
}
}
< /code>
Bei der Bearbeitung der Reihenfolge erscheint es jedoch immer noch als Etikett anstelle eines Eingabefeldes.
Vor dem Bearbeiten wird das Feld als Etikett
während des Bearbeitens angezeigt. Es wird in ein Eingabefeld
Problem Aktualisieren Sie die Bestellung, es funktioniert als erwartet. < /p>
// Display Shipping Email as a label in the shipping address before editing
add_filter('woocommerce_order_formatted_shipping_address', 'add_shipping_email_to_formatted_shipping_address', 100, 2);
function add_shipping_email_to_formatted_shipping_address($shipping_address, $order) {
$shipping_email = $order->get_meta('_shipping_email', true);
if (!empty($shipping_email)) {
$shipping_address['shipping_email'] = __('Shipping Email', 'woocommerce') . ': ' . esc_html($shipping_email);
}
return $shipping_address;
}
// Enable Shipping Email as an editable input field in Admin Order Edit Page
add_filter('woocommerce_admin_shipping_fields', 'admin_shipping_email_editable_field');
function admin_shipping_email_editable_field($fields) {
$fields['shipping_email'] = array(
'label' => __('Shipping Email', 'woocommerce'),
'type' => 'email',
'show' => true,
);
return $fields;
}
// Save the new Shipping Email field
add_action('woocommerce_process_shop_order_meta', 'custom_save_admin_shipping_email');
function custom_save_admin_shipping_email($order_id) {
if (!empty($_POST['shipping_email'])) {
$order = wc_get_order($order_id);
$order->update_meta_data('_shipping_email', sanitize_email($_POST['shipping_email']));
$order->save();
} else {
$order = wc_get_order($order_id);
$order->delete_meta_data('_shipping_email');
$order->save();
}
}
Ich versuche, der WooCommerce -Struktur richtig zu folgen. < /p>
Wie kann ich dies richtig implementieren? < /p>