Отображать следующий день доставки на основе правил даты и времени в цикле продуктов Woocommerce - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть следующий код ниже, который создает строку текста для всех товаров на страницах о домах, категориях и смежных продуктах с надписью «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>';
}

Я бы хотел, чтобы над этим была строка с текстом «СЛЕДУЮЩАЯ ДОСТАВКА:», а затем использовалась бы следующая логика:

  • Если это будний день ДО 12:00, должно быть написано "ЗАВТРА"
  • Если это рабочий день ПОСЛЕ 12:00, в нем должно быть указано название рабочего дня после завтра.
  • если это пятница ДО 12:00, то должно быть написано "ПОНЕДЕЛЬНИК"
  • Если это пятница ПОСЛЕ 12:00, то должно быть написано "ВТОРНИК"

В основном, мы предлагаем доставку на следующий день в будние дни, для заказов, сделанных до 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

1 Ответ

0 голосов
/ 12 ноября 2018

Следующий код будет динамически отображать день доставки в соответствии с вашими спецификациями времени и даты. (Вам нужно будет указать в своем магазине часовой пояс ) :

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 вашей активной дочерней темы (active theme). Проверено и работает.

enter image description here

...