Как самому написать систему скидок woocommerce?

Доброго времени суток, подскажите как можно написать свою систему скидок в woocommerce.
Ни один из плагинов не удовлетворяет мои потребности, т.к. скидка зависит от многих факторов:
- способ доставки
- скидка действует не на все товары
- для разных опций вариативных товаров действует различный процент скидки
- на странице корзины пользователь сам должен выбрать в какой акции он принимает участие
С woocommerce и wordpress я работаю впервые, поэтому прошу Вас натолкнуть меня на мысли куда мне копать, в какую сторону думать, а может расскажете мне алгоритм построения подобных систем.
Спасибо большое за любой ответ!
  • Вопрос задан
  • 2153 просмотра
Решения вопроса 1
Я думаю Вам следует посмотреть в сторону хука woocommerce_cart_calculate_fees Примеров его использования достаточно в нете. И В обработчике этого хука комбинировать условия и выполнять пересчет скидки. Так же думаю стоит посмотреть в сторону купонов. Это стандартный функционал Woocommerce. Вы можете комбинировать условия предыдущего хука и купонов.

Вот как это работает у меня. Достаточно кинуть код в functions.php и выставить верный номер категории.
/************************************************************************/
/************************************************************************/
/*	
*	Добавляем возможность скидки 50% на второй (самый дешевый) товар к корзине
* 	только для товаров категории $category_id = 914; // slag = 'aktsiya-2-1'
*/
add_action( 'woocommerce_cart_calculate_fees','hml_fee_two_plus_one', 10, 1 );
function hml_fee_two_plus_one( WC_Cart $cart_object ) {
	global $wpdb, $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { return; }
	
	$arr_cart = $cart_object->get_cart();
	if ( 0 == sizeof($arr_cart) ) { return; }
		
	//if ( is_user_logged_in() ) {
	//	$customer_id = get_current_user_id();
	//}
	//if ( 1 == $customer_id ) { // only for admin
		
  		$count = 0;
		$min_price = 0;
		$category_id = 914; // slag = 'aktsiya-2-1'
		$cats = hml_get_category_gender_line( $category_id );    // смотри ниже
		
 		foreach( $arr_cart as $item_key => $value ) {
 			if ( has_term($cats, 'product_cat', $value['product_id'] ) ) {
				$count += $value["quantity"];
				$product = $value['data'];
				$price = $product->get_price();
				if ( $price ) {	$prices[] = floatval($price); }
			}
		}
		
		$min_price = max( $min_price, min($prices) );
		
		if ( $count >= 2 && $min_price > 0 ) {
			$fee = -1 * $min_price/2;
			$cart_object->add_fee( __('Акция: 2я вещь -50%'), $fee );
		}
    //}   
}

// получаем массив всех вложенных категорий
function hml_get_category_gender_line( $cat_parent ){
	// get_term_children() accepts integer ID only
	$line = get_term_children( (int) $cat_parent, 'product_cat');
	$line[] = $cat_parent;
	return $line;
}
/************************************************************************/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы