Дополнительная опциональная плата при оформлении заказа в WooCommerce
Я создаю интернет-магазин на основе WooCommerce. Мне нужно добавить дополнительный чекбокс на странице оформления заказа под названием "Страховка доставки". Когда это поле отмечено, к итоговой сумме заказа должно добавляться $3. Я смог добавить фиксированную плату следующим образом:
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Страховка доставки', 'woocommerce'), 3 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee' );
Проблема в том, что это добавляет фиксированные $3 к сумме заказа, то есть плата не является опциональной. Есть идеи, как решить эту проблему?

Хорошо, вот как я это сделал.
Создайте товар под названием "Страховка доставки" стоимостью $3, убедитесь, что это скрытый товар (опция "Видимость в каталоге" справа).
Используйте следующий код в файле functions.php вашей темы:
add_action('woocommerce_cart_totals_after_shipping', 'wc_shipping_insurance_note_after_cart');
function wc_shipping_insurance_note_after_cart() {
global $woocommerce;
$product_id = 669;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id )
$found = true;
}
// если товар не найден, добавляем его
if ( ! $found ):
?>
<tr class="shipping">
<th><?php _e( 'Страховка доставки', 'woocommerce' ); ?></th>
<td><a href="<?php echo do_shortcode('[add_to_cart_url id="669"]'); ?>"><?php _e( 'Добавить страховку доставки (+$3)' ); ?> </a></td>
</tr>
<?php else: ?>
<tr class="shipping">
<th><?php _e( 'Страховка доставки', 'woocommerce' ); ?></th>
<td>$3</td>
</tr>
<?php endif;
}
Измените переменную $product_id на ID вашего созданного товара, и при оформлении заказа этот скрытый товар будет просто добавляться в вашу корзину.

Это не даст полного ответа на ваш вопрос, но в официальной документации WooCommerce есть пример, похожий на то, что вы пытаетесь сделать. В частности, вам нужно сочетание Уроков 1 и 2.
Документация WooCommerce: Настройка полей оформления заказа с помощью действий и фильтров
Надеюсь, это поможет вам, пока кто-нибудь не предложит более конкретное решение.
