Я создал новое поле доставки, используя woocommerce_checkout_fields, предполагая, что woocommerce автоматически сохраняет его в виде метадан: < /p>
Код: Выделить всё
// 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>
После этого я попытался отобразить поле на странице сведений за заказ администратора в качестве метки с использованием: < /p>
// 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>
Однако при редактировании порядка он все еще появляется как метка вместо поля ввода.
Я предположил, что это было неверно, и изменил мой код следующим образом: < /p>
Перед редактированием поле появляется как метка
во время редактирования, оно превращается в поле ввода
Проблема: при создании нового порядка поле пустое, но когда я вручную Обновить заказ, он работает Как и ожидалось. < /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();
}
}
Я пытаюсь правильно следовать структуре Woocommerce. < /p>
Как я могу правильно это реализовать? < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-an-input