Применить купон к базовой цене и приплюсовать к этой стоимости цену дополнительных условий
Добавил поле промокода на страницу товара, применяется нормально. У меня выводятся доп. поля (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'] );
}
}