Спасибо за участие. Я нашёл вот такой код здесь но он не работает, быть может увидев код Вы сможете его подправить, чтобы он работал на последней версии woocommerceну на общую сумму заказа действительно легко сделать "минималку", а вот по категориям разделить уже ни разу не просто)
Попробуйте использовать вместоСпасибо за участие. Я нашёл вот такой код здесь но он не работает, быть может увидев код Вы сможете его подправить, чтобы он работал на последней версии woocommerce
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
add_action( 'woocommerce_check_cart_items', 'wc_minimum_order_amount' );
Попробуйте использовать вместо
PHP:add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' ); add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
вот это
PHP:add_action( 'woocommerce_check_cart_items', 'wc_minimum_order_amount' );
// Выводит ошибку, если присутствует товар из определенной категории
// с суммой заказа меньше 500 р.
add_action( 'woocommerce_check_cart_items', 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
// Минимальная сумма заказа
$minimum = 500;
if ( WC()->cart->total < $minimum ) {
// Построение массива
$draught_links = array();
foreach(WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );
foreach ($terms as $term) {
$draught_links[] = $term->name;
}
}
// Проверка присутствия нужного товара
if (in_array("churchhela-i-pastila", $draught_links)){
$on_draught = true;
}else{
$on_draught = false;
}
// Проверка корзины
if( is_cart() ) {
if($on_draught) {
wc_print_notice(
sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
woocommerce_price( $minimum ),
woocommerce_price( WC()->cart->total )
), 'error'
);
}
} else {
if($on_draught) {
wc_add_notice(
sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
woocommerce_price( $minimum ),
woocommerce_price( WC()->cart->total )
), 'error'
);
}
}
}
}
add_action( 'woocommerce_check_cart_items', 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
// Set this variable to specify a minimum order value for a specific country
$minimum = 50;
$county = array('US');
if ( WC()->cart->total < $minimum && in_array( WC()->customer->get_shipping_country(), $county ) {
WC()->add_error( sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
woocommerce_price( $minimum ),
woocommerce_price( WC()->cart->total )
) );
}
}
уберите переменную $countryВот код позволяющий задавать минимальную сумму заказа для каждой страны:
информация взята отсюда быть может есть у кого-нибудь совет как сделать чтобы для каждой категории товара задавать свой минимальный заказ?PHP:add_action( 'woocommerce_check_cart_items', 'wc_minimum_order_amount' ); function wc_minimum_order_amount() { // Set this variable to specify a minimum order value for a specific country $minimum = 50; $county = array('US'); if ( WC()->cart->total < $minimum && in_array( WC()->customer->get_shipping_country(), $county ) { WC()->add_error( sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' , woocommerce_price( $minimum ), woocommerce_price( WC()->cart->total ) ) ); } }
if ( WC()->cart->total < $minimum && in_array( WC()->customer->get_shipping_country(), $county ) {
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
// minimum order value
$minimum = 2000;
if ( WC()->cart->total < $minimum ) {
if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
$products_min = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$_product_id = $_product->id;
$terms = get_the_terms( $_product_id, 'product_cat' );
foreach ($terms as $term) {
$_categoryid = $term->term_id;
}
// your products categories
if ( $_categoryid === 114 ) {
$products_min = true;
}
}
if( ( is_cart() || is_checkout() ) && $products_min ) {
wc_print_notice(
sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
wc_price( $minimum ),
wc_price( WC()->cart->total )
), 'error'
);
}
}
}
}
Проверил? Робит хоть?
Получается для каждой категории нужно такой отдельный код вставлять, если минималка разная.
Вообще, он как-то "перегружен" мне показался. Похоже его можно упростить.