Добавьте пользовательскую процентную плату на основе данных сеанса Woocommerce

#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%)