使用date_i18n格式化WooCommerce传递消息的日期

问题描述

使用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文件中。经过测试,可以正常工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...