Memformat Tanggal menggunakan date_i18n untuk Pesan Pengiriman WooCommerce
Menggunakan WooCommerce, saya terhubung ke arsip, halaman produk, keranjang, dan checkout menggunakan kait berikut:
woocommerce_before_single_product_summary
woocommerce_before_shop_loop
woocommerce_before_cart
woocommerce_before_checkout_form
Saya kemudian menggunakan if
argumen yang diikuti dengan elseif
dan terakhir else
,.
Argumen ini mengontrol pesan pengiriman yang ditampilkan kepada pelanggan / pengunjung.
Masalah utama saya adalah memformat tanggal.
Output saat ini:
Pemesanan yang dilakukan sebelum pukul 18:00 hari Senin akan dikirimkan pada hari Selasa, 18 Agustus, atau paling lambat satu hari setelahnya.
Output yang diharapkan:
Pemesanan yang dilakukan sebelum pukul 18:00 hari Senin akan dikirimkan pada hari Selasa, 18 Agustus, atau paling lambat lusa.
Dengan kata lain, saya ingin menambahkan "the" dan "of" ke kalimat itu, membuatnya lebih jelas dan mudah dibaca.
"The" dan "of" tambahan akan berfungsi dengan format apa pun seperti tanggal 1, 2, 5, atau bahkan 23 dalam hal hari dalam sebulan.
Saya telah membaca halaman " Memformat Tanggal dan Waktu " WordPress Codex, tetapi meskipun menggunakan format "\ t \ h \ e" dan "\ o \ f", tampilan tanggal tidak diformat dengan benar.
Ini adalah kode saya sejauh ini. Jika ada yang bisa memformat tanggal untuk saya atau menjelaskan bagaimana mengubahnya menjadi keluaran yang saya inginkan, saya akan berterima kasih.
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;
}
Jawaban
Menggunakan l, \t\h\e jS \of F,
formatting string, saya mendapatkan hasil yang benar dengan kode Anda. Saya juga membuat beberapa perubahan seperti fungsi diganti "day after tomorrow"
dengan "+2 days"
dan digunakan sprintf()
:
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>';
}
Kode masuk ke file functions.php dari tema anak aktif Anda (atau tema aktif). Teruji dan berhasil.