WooCommerce配信メッセージにdate_i18nを使用して日付をフォーマットする
WooCommerceを使用して、次のフックを使用してアーカイブ、製品ページ、カート、およびチェックアウトにフックしました。
woocommerce_before_single_product_summary
woocommerce_before_shop_loop
woocommerce_before_cart
woocommerce_before_checkout_form
次に、if
引数の後にanを使用し、elseif
最後にelse
。を使用します。
これらの引数は、顧客/訪問者に表示される配信メッセージを制御します。
私の主な問題は日付のフォーマットです。
現在の出力:
月曜日の午後6時より前に行われた注文は、8月18日火曜日、または遅くとも翌日に配達されます。
期待される出力:
月曜日の午後6時より前に行われた注文は、火曜日、8月18日、または遅くとも翌日に配達されます。
つまり、その文に「the」と「of」を追加して、わかりやすく読みやすくしたいと思います。
追加の「the」と「of」は、月の日数で1日、2日、5日、さらには23日などの任意の形式で機能します。
「日付と時刻のフォーマット」のWordPressCodexページを読みましたが、「\ t \ h \ e」と「\ o \ f」のフォーマットを使用しても、日付の表示が正しくフォーマットされていません。
これはこれまでの私のコードです。誰かが私のために日付をフォーマットしたり、それを私の希望する出力に変更する方法を説明したりできれば、私は感謝します。
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;
}
回答
l, \t\h\e jS \of F,
書式設定文字列を使用して、コードで正しい出力を取得します。また、関数を置き換え"day after tomorrow"
て"+2 days"
使用するなど、いくつかの変更を加えました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>';
}
コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunctions.phpファイルに入ります。テストされ、動作します。