#php #wordpress #woocommerce #cart #checkout
#php #wordpress #woocommerce #Корзина #Оформить покупку
Вопрос:
Приведенный ниже код добавит переключатель в форму оформления заказа woocommerce. Если покупатель выберет переключатель, в корзину будет добавлена фиксированная сумма денег, например 20
, доллар $fee = 20;
. Что мне нужно, так это вместо добавления фиксированной суммы добавить% от общей суммы, например 3%
. Изменение, которое мне нужно сделать, находится в этом разделе кода:
add_action( 'woocommerce_cart_calculate_fees', 'custom_checkout_radio_choice_fee', 20, 1 );
function custom_checkout_radio_choice_fee( $cart ) {
if ( is_admin() amp;amp; ! defined( 'DOING_AJAX' ) ) return;
$radio = WC()->session->get( 'radio_chosen' );
$disc=$order->get_total();
if ( "option_1" == $radio ) {
$fee = 20;
} elseif ( "option_2" == $radio ) {
$fee = 30;
}
$cart->add_fee( __('Option Fee', 'woocommerce'), $fee );
}
Если общая сумма до того, как пользователь нажмет переключатель 200
, равна доллару, после нажатия переключателя общая сумма становится 206
долларом (добавить 3%
).
Ответ №1:
$order
Переменная не определена, и WC_Order
объект не существует до размещения заказа. Вместо этого попробуйте следующее:
add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_radio_button_choice', 10, 1 );
function custom_fee_based_on_radio_button_choice( $cart ) {
if ( is_admin() amp;amp; ! defined( 'DOING_AJAX' ) )
return;
$radio = WC()->session->get( 'radio_chosen' );
if ( "option_1" == $radio ) {
$percent = 20;
} elseif ( "option_2" == $radio ) {
$percent = 30;
}
if( isset($percent) ) {
$fee = $cart->get_subtotal() * $percent / 100; // Calculation
$cart->add_fee( __('Option Fee', 'woocommerce'). " ($percent%)", $fee );
}
}
Ввод кода function.php файл вашей активной дочерней темы (или активной темы). протестировано и работает.
Комментарии:
1. есть ли какой-либо способ создать пользовательский файл внутри каждого продукта и добавить туда процент? значит, система автоматически получит ее оттуда? вместо одного процента для всего продукта.
Ответ №2:
$disc=$order->get_total() * 1.03;
Это сделает ваш общий итог (итого * 3%)