Идеально было бы добавить чекбокс.
<select>
), как взгляд в будущее, вдруг придется делить не на 2 типа а больше. Будет совсем просто добавить еще один тип /************************************************************************/
/************************************************************************/
/* WP - 4.6.1, WC - 2.6.11
* Добавляем возможность скидки 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; }
$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;
}
Можно ли в админке, путём перетаскивания, менять порядок отображения товаров на сайте?Конечно можно. Только этот порядок будет меняться для всех категорий
Как реализовать? Вам нужен план?
add_action( 'woocommerce_review_order_after_cart_contents', array( __CLASS__, 'woo_review_order_after_cart_contents' ) );
/**
* Обработчик хука woocommerce_review_order_before_submit
* Выводит checkbox на форму CheckOut только для разрешенных заказов
*/
public static function woo_review_order_before_submit( ) {
?>
<p class="form-row dorepeate">
<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
<input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="dorepeate" <?php checked( self::$dorepeate ); ?> id="dorepeate" />
<span class="woocommerce-dorepeate-checkbox-text">Включить подписку для этого заказа?</span>
</label>
</p>
<?php
}
add_filter( 'woocommerce_process_checkout_field_dorepeate', array( __CLASS__, 'woo_process_checkout_field_dorepeate' ) );
/**
* Обработчик хука woocommerce_process_checkout_field_
* для значения checkbox-a 'dorepeate' с формы checkout
* @param $value int 1|0
*/
public static function woo_process_checkout_field_dorepeate( $value ) {
self::$dorepeate = $value;
return $value;
}
// обработчик хука перед сохранением заказа
add_action( 'woocommerce_checkout_create_order', array( __CLASS__, 'woo_checkout_create_order' ) );
/**
* Вызывается Woocommerce перед сохранением заказа
* @param $order WC_Order
*/
public static function woo_checkout_create_order( $order ) {
// сохраняем статус повторяемости заказа
// определяется возможностью повторяемости для самого товара в корзине
// и подтверждением пользователя
$order->update_meta_data( '_is_repeating', self::$dorepeate );
// начальный статус - 'не активен'
$order->update_meta_data( '_repeate_status', 'inactive' );
}