Định dạng ngày sử dụng date_i18n cho Thông báo gửi WooCommerce

Aug 16 2020

Sử dụng WooCommerce, tôi đã kết nối vào kho lưu trữ, trang sản phẩm, giỏ hàng và thanh toán bằng các móc sau:

  • woocommerce_before_single_product_summary
  • woocommerce_before_shop_loop
  • woocommerce_before_cart
  • woocommerce_before_checkout_form

Sau đó, tôi đang sử dụng một ifđối số được theo sau bởi một elseifvà cuối cùng else,.

Các đối số này kiểm soát thông điệp gửi được hiển thị cho khách hàng / khách truy cập.

Vấn đề chính của tôi là định dạng ngày.

Sản lượng hiện tại:

Các đơn đặt hàng được thực hiện trước 6 giờ chiều Thứ Hai sẽ được giao vào Thứ Ba, ngày 18 tháng 8 hoặc chậm nhất là ngày hôm sau.

Sản lượng mong đợi:

Các đơn đặt hàng được thực hiện trước 6 giờ chiều Thứ Hai sẽ được giao vào Thứ Ba, ngày 18 tháng 8 hoặc chậm nhất là một ngày sau đó.

Nói cách khác, tôi muốn thêm "the" và "of" vào câu đó, làm cho nó rõ ràng và dễ đọc hơn.

Phần bổ sung "the" và "of" sẽ hoạt động với bất kỳ định dạng nào, chẳng hạn như ngày 1, 2, 5 hoặc thậm chí 23 về các ngày trong tháng.

Tôi đã đọc trang WordPress Codex " Định dạng Ngày và Giờ ", nhưng ngay cả khi sử dụng định dạng "\ t \ h \ e" và "\ o \ f", hiển thị ngày được định dạng không chính xác.

Đây là mã của tôi cho đến nay. Nếu ai đó có thể định dạng ngày cho tôi hoặc giải thích cách thay đổi nó thành đầu ra mong muốn của tôi, tôi sẽ rất biết ơn.

add_action( 'woocommerce_before_single_product_summary', 'product_delivery_message' );
add_action( 'woocommerce_before_shop_loop', 'product_delivery_message' );
add_action( 'woocommerce_before_cart', 'product_delivery_message' );
add_action( 'woocommerce_before_checkout_form', 'product_delivery_message' );

function product_delivery_message() {

date_default_timezone_set( 'Europe/Paris' );

    // delivery cut-off for friday and weekend

    if ( date_i18n( 'N' ) >= 5 ) {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "next wednesday" )); $order_before = "Monday";
    }

    // on monday to thursday before XX (currently set to 18 = 6PM), delivery will be on next week tuesday

    elseif ( date_i18n( 'H' ) >= 18 ) {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "day after tomorrow" )); $order_before = "tomorrow";
    }

    // monday to thursday within the cut-off time, delivery will be next day (tomorrow)

    else {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "tomorrow" )); $order_before = "today";
    }

    $delivery_message = "<div class='product-delivery-message' style='clear:both'>Orders made before 6PM {$order_before} will be delivered on {$delivery_day} or the day after at the latest.</div>"; echo $delivery_message;
}

Trả lời

LoicTheAztec Aug 16 2020 at 20:07

Sử dụng l, \t\h\e jS \of F,chuỗi định dạng, tôi nhận được đầu ra chính xác với mã của bạn. Tôi cũng đã thực hiện một số thay đổi như thay thế "day after tomorrow"bằng "+2 days"và sử dụng sprintf()chức năng:

add_action( 'woocommerce_before_single_product_summary', 'product_delivery_message' );
add_action( 'woocommerce_before_shop_loop', 'product_delivery_message' );
add_action( 'woocommerce_before_cart', 'product_delivery_message' );
add_action( 'woocommerce_before_checkout_form', 'product_delivery_message' );

function product_delivery_message() {
    date_default_timezone_set( 'Europe/Paris' );

    $date_format = __('l, \t\h\e jS \of F,', 'woocommerce'); // 1. Delivery cut-off for friday and weekend if ( date_i18n('N') >= 5 ) { $delivery_day = date_i18n( $date_format, strtotime( "next wednesday" ) ); $order_before = __('Monday', 'woocommerce');
    }
    // 2. From monday to thursday before XX (currently set to 18 = 6PM), delivery will be on next week tuesday
    elseif ( date_i18n('H') >= 18 ) {
        $delivery_day = date_i18n( $date_format, strtotime( "+2 days" ) );
        $order_before = __('tomorrow', 'woocommerce'); } // 3. From monday to thursday within the cut-off time, delivery will be next day (tomorrow) else { $delivery_day = date_i18n( $date_format, strtotime( "+1 day" ) ); $order_before = __('today', 'woocommerce');
    }

    $message = sprintf( __("Orders made before 6PM %s will be delivered on %s or the day after at the latest.", "woocommerce"), $order_before, $delivery_day ); echo '<div class="product-delivery-message" style="clear:both">' . $message . '</div>';
}

Mã nằm trong tệp functions.php của chủ đề con đang hoạt động (hoặc chủ đề hoạt động) của bạn. Đã thử nghiệm và hoạt động.