Добавьте радиокнопки доставки перед общей суммой заказа в кассе WooCommerce - PullRequest
2 голосов
/ 20 июня 2020

Я пишу плагин WordPress, в котором мне нужно добавить два переключателя перед общей суммой заказа в разделе обзора заказов WooCommerce. Я понял, как добавить настраиваемые переключатели в раздел обзора заказа, но я не могу понять, как переместить параметры доставки непосредственно перед общей суммой заказа.

Пожалуйста, проверьте снимок экрана, чтобы понять, чего именно я хочу достичь.

enter image description here

Вот мой код:

// Part 1 
// Display Radio Buttons

add_action( 'woocommerce_review_order_before_payment', 'bbloomer_checkout_radio_choice' );

function bbloomer_checkout_radio_choice() {

   $chosen = WC()->session->get( 'radio_chosen' );
   $chosen = empty( $chosen ) ? WC()->checkout->get_value( 'radio_choice' ) : $chosen;
   $chosen = empty( $chosen ) ? '0' : $chosen;

   $args = array(
   'type' => 'radio',
   'class' => array( 'form-row-wide', 'update_totals_on_change' ),
   'options' => array(

      '2.95' => '60 MINUTES: €2.95',
      '0' => '24 - 48 HOURS',
   ),
   'default' => $chosen
   );

   echo '<div id="checkout-radio">';
   echo '<h3>Delivery Options</h3>';
   woocommerce_form_field( 'radio_choice', $args, $chosen );
   echo '</div>';

}

// Part 2 
// Add Fee and Calculate Total

add_action( 'woocommerce_cart_calculate_fees', 'bbloomer_checkout_radio_choice_fee', 20, 1 );

function bbloomer_checkout_radio_choice_fee( $cart ) {

   if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

   $radio = WC()->session->get( 'radio_chosen' );



   if ( $radio ) {
      $cart->add_fee( 'Delivery Fee', $radio );
   }

}

// Part 3 
// Add Radio Choice to Session

add_action( 'woocommerce_checkout_update_order_review', 'bbloomer_checkout_radio_choice_set_session' );

function bbloomer_checkout_radio_choice_set_session( $posted_data ) {
    parse_str( $posted_data, $output );
    if ( isset( $output['radio_choice'] ) ){
        WC()->session->set( 'radio_chosen', $output['radio_choice'] );
    }
}

Пожалуйста, помогите мне с этим.

Заранее спасибо.

1 Ответ

1 голос
/ 20 июня 2020

Чтобы переместить ваши радиокнопки перед суммой заказа, вам нужно будет использовать другой крючок. Но у вас не может быть этих переключателей доставки в строке итоговой суммы комиссии…

Я упростил и пересмотрел код:

add_action( 'woocommerce_review_order_before_order_total', 'checkout_delivery_radio_buttons' );
function checkout_delivery_radio_buttons() {
    echo '<tr class="delivery-radio">
            <th>'.__("Delivery Options").'</th><td>';

    $chosen = WC()->session->get( 'delivery' );
    $chosen = empty( $chosen ) ? WC()->checkout->get_value( 'delivery' ) : $chosen;
    $chosen = empty( $chosen ) ? '0' : $chosen;

    woocommerce_form_field( 'delivery',  array(
        'type'      => 'radio',
        'class'     => array( 'form-row-wide', 'update_totals_on_change' ),
        'options'   => array(
            '2.95'  => '60 MINUTES: €2.95',
            '0'     => '24 - 48 HOURS',
        ),
    ), $chosen );
    
    echo '</td></tr>';
}

add_action( 'woocommerce_cart_calculate_fees', 'checkout_delivery_fee', 20, 1 );
function checkout_delivery_fee( $cart ) {
    if ( $radio = WC()->session->get( 'delivery' ) ) {
        $cart->add_fee( 'Delivery Fee', $radio );
    }
}

add_action( 'woocommerce_checkout_update_order_review', 'checkout_delivery_choice_to_session' );

function checkout_delivery_choice_to_session( $posted_data ) {
    parse_str( $posted_data, $output );
    if ( isset( $output['delivery'] ) ){
        WC()->session->set( 'delivery', $output['delivery'] );
    }
}

Код входит в функции. php файл вашего активная дочерняя тема (или активная тема). Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...