Применить купон к базовой цене и приплюсовать к этой стоимости цену дополнительных условий

Добавил поле промокода на страницу товара, применяется нормально. У меня выводятся доп. поля (ACF), которые как выступают в роли доп. цены, если отметить поле, то пересчитывается цена в скрытом инпуте, который потом уже улетает в корзину, это все работает.

В чем вопрос, как мне сделать, чтобы если применяется промокод, то он применялся к базовой цене + стоимость того, что накликали? У меня сейчас 2 скрытых инпута, в одном базовая цена, во втором цена которая накликана, плиз хелп.

Посмотреть как работает можно тут: http://projects.dezzen.ru/ru-france-new/product/magicheskij-mon-sen-mishel/

// The product custom field - Frontend
add_action( 'woocommerce_before_add_to_cart_button', 'custom_discount_price_product_field' );
function custom_discount_price_product_field() {
    global $product;

    echo '<input type="hidden" name="custom_price" value="">';
    echo '<input type="hidden" name="promo_price" value="">';

}

/* Add a custom field to product in backend */
add_action( 'woocommerce_product_options_pricing', 'add_field_product_options_pricing' );
function add_field_product_options_pricing() {
    global $post;

    echo '<div class="options_group">';

    woocommerce_wp_text_input( array(
        'id'            => '_price_discount',
        'label'         => __('Discount price', 'woocommerce') . ' (%)',
        'placeholder'   => __('Set the Discount price…', 'woocommerce'),
        'description'   => __('Enter the custom value here.', 'woocommerce'),
        'desc_tip'      => 'true',
    ));

    echo '</div>';
}

// Save product custom field to database when submitted in Backend
add_action( 'woocommerce_process_product_meta', 'save_product_options_custom_fields', 30, 1 );
function save_product_options_custom_fields( $post_id ){
    // Saving custom field value
    if( isset( $_POST['_price_discount'] ) ){
        update_post_meta( $post_id, '_price_discount', sanitize_text_field( $_POST['_price_discount'] ) );
    }
}

/*Add custom calculated price conditionally as custom data to cart items*/
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_price_to_cart_item_data', 20, 2 );
function add_custom_price_to_cart_item_data( $cart_item_data, $product_id ){
    if( ! isset($_POST['promo_price']) )
        return $cart_item_data;

    //$addition = (float) sanitize_text_field( $_POST['custom_price'] );
    
    $cart_item_data['promo_price'] = (float) sanitize_text_field( $_POST['promo_price'] );
    $cart_item_data['unique_key'] = md5( microtime() . rand() ); // Make each item unique
    
    

    if (isset($_POST['product-coupon']) && ! empty($_POST['product-coupon'])) {
        
    } else {
        
    }

    return $cart_item_data;
}

// Set conditionally a custom item price

add_action('woocommerce_before_calculate_totals', 'set_cutom_cart_item_price', 20, 1);
function set_cutom_cart_item_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    foreach (  $cart->get_cart() as $cart_item ) {
        if ( isset( $cart_item['custom_price'] ) )
            $cart_item['data']->set_price( $cart_item['custom_price'] );
    }
}

Ответы (0 шт):