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);
    }
}  
  

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