Условное уведомление о доставке на основе времени и даты в Woocommerce - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь собрать сообщение, в котором будет отображаться уведомление об отправке в зависимости от того, какое время с понедельника по четверг и с пятницы по воскресенье.

Если клиент заказывает до 12 часов (дневное время), заказ отправляется в тот же день, с понедельника по четверг, и доставляется на следующий день.

Если клиент заказывает после 12:00 с понедельника по четверг, заказ будет подготовлен и отправлен на следующий день с понедельника по четверг.

Все заказы, сделанные с пятницы по воскресенье, будут подготовлены и отправлены в следующий день недели (понедельник).

Код, который я использую, этого не делает, и я пытаюсь понять, как заставить его работать. Любая помощь очень ценится.

    add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
    add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
    add_action( 'woocommerce_before_checkout_form', 'next_day_delivery' );
    add_action( 'woocommerce_before_shop_loop', 'next_day_delivery' );
    add_action( 'woocommerce_before_single_product_summary', 'next_day_delivery' );
    add_action( 'woocommerce_before_cart', 'next_day_delivery' );

    function next_day_delivery() {

        date_default_timezone_set('Europe/Stockholm');
        $end_time         = mktime('12', '00', '00', '2018');
        $now_time         = strtotime("now");

        if ( WC()->cart->get_cart_contents_count() > 0 ) && $now_time < $end_time {

        // print the information notice
        wc_print_notice( __( 'Order within $end_time - $now_time and get your order delivered tomorrow!', 'woocommerce' ), 'success' );
    }

else if wc_print_notice( __( 'Your order will be prepared and shipped on Monday.', 'woocommerce' ), 'success' );
    }

1 Ответ

0 голосов
/ 30 октября 2018

В вашем коде есть ошибки и упущения. Далее будет отображаться условно уведомление о доставке, как определено в вашем вопросе:

add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_checkout_form', 'next_day_delivery' );
add_action( 'woocommerce_before_shop_loop', 'next_day_delivery' );
add_action( 'woocommerce_before_single_product_summary', 'next_day_delivery' );
add_action( 'woocommerce_before_cart', 'next_day_delivery' );

function next_day_delivery() {
    if( WC()->cart->is_empty() )
        return; // Exit

    // Set the time zone
    date_default_timezone_set('Europe/Stockholm');

    // From Monday to Thursday
    $is_week_days  = in_array( date('w'), array( 1, 2, 3, 4 ) ) ? true : false;
    $end_time      = mktime('12', '00', '00', date('m'), date('d'), date('Y'));
    $now_time      = time();
    $after_tomorow = date('l', strtotime('+2 days'));

    $dateDiff      = intval(($end_time - $now_time)/60);
    $diff_hours    = intval($dateDiff/60);
    $diff_minutes  = $dateDiff%60;
    $hours_label   = _n( 'hour', 'hours', $diff_hours, 'wooocommerce' );
    $minutes_label = _n( 'minute', 'minutes', $diff_minutes, 'wooocommerce' );


    if ( $end_time > $now_time && $is_week_days ) {
        // print the information notice
        $message = sprintf( __( '%s left to be delivered tomorrow!', 'woocommerce' ),
        $diff_hours.' '.$hours_label.' and '.$diff_minutes.' '.$minutes_label);
    }
    elseif ( $end_time <= $now_time && $is_week_days ) {
        $message = sprintf( __( 'Your order will be delivered this %s.', 'woocommerce' ), $after_tomorow );
    } else {
        $message = __( 'Your order will be prepared and shipped next upcoming monday and delivered on tuesday.', 'woocommerce' );
    }
    wc_print_notice( $message, 'success' );
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...