Установить скидку в зависимости от количества заказа

В WooCommerce, как установить скидку в зависимости от количества заказа?

Например, я хотел бы применить скидку на основании заказов клиентов:

  • скидка при первом заказе $ 50
  • скидка на второй заказ 30 $
  • скидка на третий заказ 10 $?

Я поискал в интернете, но не нашел ни одного решения или доступных плагинов.

Благодарю.

0

Решение

Вот пользовательская функция подключена woocommerce_cart_calculate_fees это добавит в корзину пользовательскую скидку, основанную на количестве заказов клиентов, таким образом:

add_action('woocommerce_cart_calculate_fees' , 'discount_based_on_customer_orders', 10, 1);
function discount_based_on_customer_orders( $cart_object ){

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

// Getting "completed" customer orders
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key'    => '_customer_user',
'meta_value'  => get_current_user_id(),
'post_type'   => 'shop_order', // WC orders post type
'post_status' => 'wc-completed' // Only orders with status "completed") );

// Orders count
$customer_orders_count = count($customer_orders);

// The cart total
$cart_total = WC()->cart->get_total(); // or WC()->cart->get_total_ex_tax()

// First customer order
if( empty($customer_orders) || $customer_orders_count == 0 ){
$discount_text = __('First Order Discount', 'woocommerce');
$discount = -50;
}
// 2nd orders discount
elseif( $customer_orders_count == 1 ){
$discount_text = __('2nd Order Discount', 'woocommerce');
$discount = -30;
}
// 3rd orders discount
elseif( $customer_orders_count == 2 ){
$discount_text = __('3rd Order Discount', 'woocommerce');
$discount = -10;
}

// Apply discount
if( ! empty( $discount ) ){
// Note: Last argument is related to applying the tax (false by default)
$cart_object->add_fee( $discount_text, $discount, false);
}
}

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

Этот код протестирован и работает.

Единственная проблема может быть, если клиент не вошел в систему.

Вы можете добавить, в начале, в первом состоянии ! is_user_logged_in() сюда:

    if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
return;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]