如何设置一个下拉菜单以选择结帐woocommerce中的运输区域

时间:2019-07-12 17:34:44

标签: wordpress woocommerce

我目前正在一家餐馆的网站上工作。事实是,他们需要允许用户在结帐时选择运输区域。

因此,在这种情况下,woocommerce的运输区域配置无法按预期工作。主要目标是允许客户从下拉菜单,运输区域中进行选择,并通过ajax将税金添加到总计中。

我在另一个网站上找到了一个片段,可能是解决方案,此外,它是一个单选按钮字段,我需要选择下拉菜单。

我已经尝试了代码段的转换,但是我没有用。

有人可以看看并告诉我是否有可能做到这一点?

我附上我发现的摘录。

我已经尝试了很多插件。 我已将代码添加到functions.php文件中

没有错误消息。

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 ) ? 'no_option' : $chosen;

   $args = array(
   'type' => 'radio',
   'class' => array( 'form-row-wide' ),
   'options' => array(
      'option_1' => 'Zone 1 ($1000)',
      'option_2' => 'Zone 2 ($2000)',
      'option_3' => 'Zone 3 ($2500)',
      'option_4' => 'Zone 4 ($3500)',
   ),
   'default' => $chosen
   );

   echo '<div id="checkout-radio">';
   echo '<h3>Choisissez votre zone de livraison !</h3>';
   echo '<div class="radio-options">';
   woocommerce_form_field( 'radio_choice', $args, $chosen );
   echo '</div>';
   echo '</div>';

}

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 ( "option_1" == $radio ) {
       $fee = 1000;
      } elseif ( "option_2" == $radio ) {
       $fee = 2000;
      }elseif ( "option_3" == $radio ) {
        $fee = 2500;
      }elseif ( "option_4" == $radio ) {
        $fee = 3500;
      }
      $cart->add_fee( __('Option Fee', 'woocommerce'), $fee );

    }

add_action( 'wp_footer', 'bbloomer_checkout_radio_choice_refresh' );


function bbloomer_checkout_radio_choice_refresh() {
if ( ! is_checkout() ) return;
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on('change', 'input[name=radio_choice]', function(e){
            e.preventDefault();
            var p = $(this).val();
            $.ajax({
                type: 'POST',
                url: wc_checkout_params.ajax_url,
                data: {
                    'action': 'woo_get_ajax_data',
                    'radio': p,
                },
                success: function (result) {
                    $('body').trigger('update_checkout');
                }
            });
        });
    });
    </script>
    <?php
}



add_action( 'wp_ajax_woo_get_ajax_data', 'bbloomer_checkout_radio_choice_set_session' );
    add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'bbloomer_checkout_radio_choice_set_session' );

function bbloomer_checkout_radio_choice_set_session() {
    if ( isset($_POST['radio']) ){
        $radio = sanitize_key( $_POST['radio'] );
        WC()->session->set('radio_chosen', $radio );
        echo json_encode( $radio );
    }
    die();
}

0 个答案:

没有答案