Я только что попытался добавить «Дату доставки» в процесс оформления заказа WooCommerce на основе этого и этого потоков.
Это связанный код для печати даты доставки в метаданных заказа и просмотра ее на странице «Спасибо», а также на странице заказа администратора:
//Shipping (Delivery) Date
// Add custom checkout datepicker field
add_action( 'woocommerce_before_order_notes', 'checkout_display_datepicker_custom_field' );
function checkout_display_datepicker_custom_field( $checkout ) {
$field_id = 'my_datepicker';
echo '<div id = "datepicker-wrapper">';
$today = strtotime('today');
$tomorrow = strtotime('tomorrow');
$dayAfterTomorrow = strtotime('+2 days');
woocommerce_form_field( $field_id, array(
'type' => 'select',
'class' => array('my-field-class form-row-wide'),
'label' => __('Choose a date'),
'placeholder' => __('Select delivery date'),
'required' => true, // Or false
'options' => array(
'' => 'Select',
date( 'yyyy-mm-dd', $today ) => date( get_option('date_format'), $today ),
date( 'yyyy-mm-dd', $tomorrow ) => date( get_option('date_format'), $tomorrow ),
date( 'yyyy-mm-dd', $dayAfterTomorrow ) => date( get_option('date_format'), $dayAfterTomorrow ),
)));
echo '<br></div>';
}
// Save field
add_action( 'woocommerce_checkout_create_order', 'save_datepicker_custom_field_value', 10, 2 );
function save_datepicker_custom_field_value( $order, $data ){
$field_id = 'my_datepicker';
$meta_key = '_'.$field_id;
if ( isset($_POST[$field_id]) && ! empty($_POST[$field_id]) ) {
$date = esc_attr($_POST[$field_id]);
$order->update_meta_data( $meta_key, $date ); // Save date as order meta data
$note = sprintf(__("Chosen date for Thank you page: %s.", "woocommerce"), $date );
$note = isset($data['order_comments']) && ! empty($data['order_comments']) ? $data['order_comments'] . '. ' . $note : $note;
// Save date on customer order note
$order->set_customer_note( $note );
}
}
Он печатает выбранную дату, но в неправильном формате, например: 20202020-1212-2424.
Как я могу изменить эту ошибку?
Вы используете неправильный формат в своих функциях date()
.
Взгляните на формат даты/времени docs.
В вашем случае yyyy-mm-dd
:
y
Двузначное представление годаm
Числовое представление месяца с ведущими нулямиd
День месяца, 2 цифры с ведущими нулямиСледовательно, 20202020-1212-2424
.
Вероятно, вы имели в виду 2020-12-24
, что должно быть Y-m-d
:
Y
Полное числовое представление года, 4 цифры