@TinkyGO

Как добавить возможность выбрать дату/время доставки WooCommerce?

Собстна, сабж. Нагуглил какие-то плагины, но не заводится. После настроек плагинов такая возможность не появилась.

Ну эт ничего, я думаю можно самому такое запилить. Это же всего лишь type=date, меня только надо пнуть, как все это дело закинуть в checkout и и добавлять в мету, чтобы потом это отображалось в заказе.
  • Вопрос задан
  • 538 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Bodrosh
Вот так можно (может быть потребуется библилотека flatpickr для выпадающего календаря b dhtvtyb)
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

function my_custom_checkout_field( $checkout ) {

    echo '<div class="form-row notes"><br><label>Дата и время получения заказа</label>';

    woocommerce_form_field( 'client_date', array(
        'type'          => 'text',
        'class'         => array('form-row-first'),
        'label'         => __(''),
        'placeholder'   => _x('Дата', 'placeholder', 'woocommerce'),
    ), $checkout->get_value( 'client_date' ));

    woocommerce_form_field( 'client_time', array(
        'type'          => 'text',
        'class'         => array('form-row-last'),
        'label'         => __(''),
        'placeholder'   => _x('Время', 'placeholder', 'woocommerce'),
    ), $checkout->get_value( 'client_time' ));

    echo '</div>';
    echo '<div class="form-row notes br-notes-1"><label>Время заказа определяется после звонка оператора.</label></div>';

}
/**
 * Обновляем добавленные поля в БД
 */
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['client_date'] ) ) {
        update_post_meta( $order_id, 'client_date', sanitize_text_field( $_POST['client_date'] ) );
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Дата и время').':</strong> ' . get_post_meta( $order->get_id(), 'client_date', true ) . ' ' .get_post_meta( $order->get_id(), 'client_time', true ) . '</p>';
}
/* Отправка добавленных полей на email
*/
add_filter('woocommerce_email_order_meta_fields', 'br_add_email_order_meta_fields', 10, 3);

function br_add_email_order_meta_fields( $fields, $sent_to_admin, $order_obj ) {
 $fields['client_date'] = array(
        'label' => 'Дата и время',
        'value' => get_post_meta( $order_num, 'client_date', true ) . ' ' . get_post_meta( $order_num, 'client_time', true )
    );
}
add_action( 'wp_footer', 'awoohc_add_script_update_shipping_method' );
function awoohc_add_script_update_shipping_method() {
    if ( is_checkout() ) { ?>
         <script>
            jQuery(document).ready(function ($) {

                  if( $("#client_date").length > 0 ) {
                    let optsDate = {
                        "locale": "ru",
                        "dateFormat":  "d.m.Y",
                    };
                    $("#client_date").flatpickr(optsDate);
                }

                if( $("#client_time").length > 0 ) {
                    let optsTime = {
                        locale: "ru",
                        enableTime: true,
                        noCalendar: true,
                        dateFormat: "H:i",
                        time_24hr: true
                    };

                    $("#client_time").flatpickr(optsTime);
                }
            });



        </script>
 <?php    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы