问题描述
使用WooCommerce,我已经使用以下钩子钩住了存档,产品页面,购物车和结帐:
-
woocommerce_before_single_product_summary
-
woocommerce_before_shop_loop
-
woocommerce_before_cart
-
woocommerce_before_checkout_form
然后我使用一个if
参数,后跟一个elseif
,最后是else
。
这些参数控制向客户/访客显示的传递消息。
我的主要问题是格式化日期。
当前输出:
周一下午6点之前下达的订单将在8月18日(星期二)或更晚的第二天交付。
预期输出:
周一下午6点之前下达的订单将在8月18日(星期二)或更晚的第二天交付。
换句话说,我想在该句子中添加“ the”和“ of”,使其更清晰易读。
附加的“ the”和“ of”将以任何格式(例如每月的第1、2、5,甚至23号)使用。
我已经阅读了“ Formatting Date and Time” WordPress Codex页面,但是即使使用“ \ 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,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,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,','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文件中。经过测试,可以正常工作。