php - 根据 Woocommerce 产品循环中的日期时间规则显示下一个交货日

标签 php wordpress date woocommerce product

下面的代码在主页、类别和相关产品页面上的所有产品下创建一行文本,内容为“GREATER CAPE TOWN AREA”...

add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_products_loop', 20 );
function woocommerce_products_loop(){
    global $product;

    echo '<p class="deliveryline">' . __("GREATER CAPE TOWN AREA", "woocommerce") . '</p>';
}

我想在上面有一行文字,上面写着“NEXT DELIVERY:”,然后使用以下逻辑:

  • 如果是工作日中午 12 点之前,则应显示“TOMORROW”
  • 如果是工作日中午 12 点之后,则应显示后天的工作日名称。
  • 如果是星期五中午 12 点之前,则应显示“MONDAY”
  • 如果是周五中午 12 点之后,则应显示“TUESDAY”

基本上,对于中午 12 点之前下的订单,我们在工作日提供次日送达服务。

我有类似的代码,可能有效..

$now = new Zend_Date();
if (($now->get(Zend_Date::WEEKDAY_DIGIT) % 6 == 0)
 || ($now->isLater('17:00:00', Zend_Date::TIMES))
) { 
    $now->set(
        strtotime('+1 weekday', $now->toString(Zend_Date::TIMESTAMP)),
        Zend_Date::TIMESTAMP
    );
}   
echo $now->toString(Zend_Date::W3C);

我只需要帮助,请找出我需要的正确数学(此代码基于当天下午 5 点之前的情况),然后我应该将其放在原始代码中的什么位置?

有人可以帮忙完成这个完整的代码片段吗?理想情况下,我希望它看起来像所附图片。

期望的结果:

desired result

最佳答案

以下代码将根据您的时间和日期规范动态显示交货日期(您必须在代码中设置您的商店time zone):

add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_products_loop', 20 );
function woocommerce_products_loop(){
    global $product;

    // Set Your shop time zone (http://php.net/manual/en/timezones.php)
    date_default_timezone_set('Europe/Paris');

    $is_week_days  = in_array( date('w'), array( 1, 2, 3, 4 ) ) ? true : false; // From Monday to Thursday
    $is_friday     = date('w') == 5 ? true : false; // Friday
    $is_week_end   = in_array( date('w'), array( 0, 6 ) ) ? true : false; // Weekend days

    $end_time      = mktime('12', '00', '00', date('m'), date('d'), date('Y')); // 12h00
    $now_time      = time();

    $after_tomorow = date('l', strtotime('+2 days'));

    // Displayed day conditions
    if( $is_week_days && $now_time < $end_time ) {
        $displayed_day = __("TOMORROW", "woocommerce");
    } elseif( $is_week_days && $now_time >= $end_time ) {
        $displayed_day = strtoupper( date( 'l', strtotime('+2 days') ) );
    } elseif( $is_friday && $now_time < $end_time ) {
        $displayed_day = __("MONDAY", "woocommerce");
    } elseif( ( $is_friday && $now_time >= $end_time ) || $is_week_end ) {
        $$displayed_day = __("THUESDAY", "woocommerce");
    }

    // Dynamic text Output based on date and time
    echo '<p class="deliveryline">' . __("NEXT DELIVERY: ", "woocommerce") . $displayed_day .
        '<br>' . __("GREATER CAPE TOWN AREA", "woocommerce") . '</p>';
}

代码位于事件子主题(事件主题)的 function.php 文件中。经过测试并有效。

enter image description here

关于php - 根据 Woocommerce 产品循环中的日期时间规则显示下一个交货日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53262537/

相关文章:

PHP异步任务

php - mysql - woocommerce 如何获取类别中的产品

html - 我怎样才能让我的 BG 包装器一直加载到页面下方,或者显示在内容之前?

css - 如何在 wordpress 模板中进行更改。 Css 直接编辑不起作用

python - 从python中的数据框中提取某些日期

PHP date() 返回格式 yyyy-mm-ddThh :mm:ss. uZ

php - 如何在单击按钮时调用 php 函数

php - 组合两个查询时出现问题

php - 无法覆盖 Symfony 4 上 POST 请求中可选参数的默认值

mysql - 如何使用 MYSQL 按随机天数更新日期?