Wordpress - Woocommerce. Нужна помощь с доп. полем с ценой
Есть вариантивные товары (двери), к которым нужно добавить один дополнительный пункт(наличник) со стоимостью (для каждого товара будет разная стоимость наличника), и нужно чтобы эта стоимость плюсовалась к цене товара только если в карточке товара отмечен чекбокс. У меня получилось:
- вывести доп. поле в админке где вводим стоимость наличника для каждого товара
- вывести доп. поле в виде чекбокса
- приплюсовать содержимое доп. поля к цене товара в корзине
Но не получается сделать, чтобы содержимое доп. поля плюсовалось к цене товара в корзине только в том случае, если чекбокс отмечен.
Вот мой код:
// Выводим доп. поле в админке
add_action( 'woocommerce_product_options_advanced', 'wc_cost_product_field' );
function wc_cost_product_field() {
woocommerce_wp_text_input( array(
'id' => '_platband_price',
'class' => 'wc_input_price short',
'label' => __( 'Наличник', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')'
));
}
// Сохраняем доп. поле
add_action( 'woocommerce_admin_process_product_object', 'save_product_custom_meta_data', 100, 1 );
function save_product_custom_meta_data( $product ){
if ( isset( $_POST['_platband_price'] ) )
$product->update_meta_data( '_platband_price', sanitize_text_field($_POST['_platband_price']) );
}
// Выводим доп поле на фронте в виде чекбокса
add_action('woocommerce_before_add_to_cart_form','add_platband_price_option_to_single_product', 2 );
function add_platband_price_option_to_single_product(){
global $product;
$platband = $product->get_meta( '_platband_price', true);
echo '<input name="platband" type="checkbox"> Наличник - ' . $platband . '';
}
// Плюсуем содержимое доп. поля к стоимости товара в корзине
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$platband = get_post_meta($value['product_id'], '_platband_price', true);
$custom_price = $value['data']->get_price() + $platband;
$value['data']->set_price($custom_price);
}
}