Процентная скидка, ограниченная диапазоном дат и количеством заказов в Woocommerce - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать функцию, которая устанавливает скидку на корзину в 10% независимо от того, какой продукт или сколько в корзине.

Этот код отлично работает:

function site_wide_shop_discount_with_custom_title( $cart ) {
  $discount = $cart->subtotal * 0.1;
  $cart->add_fee( __( 'YOUR TEXT HERE', 'your-text-domain' ) , -$discount );
}
add_action( 'woocommerce_cart_calculate_fees', 'site_wide_shop_discount_with_custom_title' );

Моя цель - ограничить это диапазоном дат и 100 заказами.Этот код, который является моей целью, не работает:

function shop_discount_for_100_orders( $cart ) {

    $discountWeekStart = new DateTime('2018-10-07'); // when the discount week starts
    $dsicountWeekEnd  = new DateTime('2018-10-15'); // when the discount week ends
    $hundred_orders_discount = $cart->subtotal * 0.1; // during discount week, we give ten percent off the cart subtotal
    $hundred_orders_discount_over = $cart->subtotal; // no more discount


    if ( $discountWeekStart ) {
    $cart->add_fee( __( 'Global Discount Week', 'my-text-domain' ) , -$hundred_orders_discount );
    } else if {
        $hundred_orders_discount_over;
}
    }
add_action( 'woocommerce_cart_calculate_fees', 'shop_discount_for_100_orders' );

Есть идеи, как ограничить скидку диапазоном дат и как установить его на 100 заказов, считая с последнего?

Любые идеи, помощь или поддержка приветствуются.

1 Ответ

0 голосов
/ 08 октября 2018

Следующий код будет условно устанавливать процентную скидку, ограниченную определенным количеством заказов и основанную на диапазоне даты-времени.

Вам нужно будет определить магазин часовой пояс выбор правильной строки из этого списка строк часовых поясов

Код:

// Add a discount conditionally based on a date range for the
add_action( 'woocommerce_cart_calculate_fees', 'limited_date_range_percentage_discount' );
function limited_date_range_percentage_discount( $cart ) {
    // Your settings:
    date_default_timezone_set('Europe/Paris'); // Define the Time zone from this allowed time zones strings (http://php.net/manual/en/timezones.php)
    $start_time       = mktime('00', '00', '00', '10', '07', '2018'); // starting on "2018-10-07"
    $end_time         = mktime('23', '59', '59', '10', '15', '2018'); // Ending on "2018-10-15" (included)
    $now_time         = strtotime("now"); // Now time
    $percentage       = 10; // Discount percentage
    $max_orders_count = 100; // Limit to the first XXX orders

    $subtotal       = $cart->get_subtotal();
    $dicounts_count = get_option('wc-discounted-orders-count') ? get_option('wc-discounted-orders-count') : 0;

    if ( $now_time >= $start_time && $now_time <= $end_time && $dicounts_count <= $max_orders_count ) {
        $discount = $cart->get_subtotal() * $percentage / 100;
        $cart->add_fee( __( 'Week Discount', 'woocommerce' ) . ' (' . $percentage . '%)', -$discount );
    }
}

// Discounted orders count update
add_action('woocommerce_checkout_create_order', 'update_discounted_orders_count', 20, 2);
function update_discounted_orders_count( $order, $data ) {
    if( $orders_count = get_option('wc-discounted-orders-count') ){
        update_option( 'wc-discounted-orders-count', $orders_count + 1 );
    } else {
        update_option( 'wc-discounted-orders-count', 1 );
    }
}

Код находится в файле function.php вашей активной дочерней темы (активной темы),Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...