首页 > 解决方案 > 刷新页面后 Ajax 不适用于第一次 wordpress/woocommerce

问题描述

我在 function.php 文件中有一些代码。我有 ajax 函数,我在会话中设置变量,并在 function.php 的某个钩子中使用它。

阿贾克斯:

 <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:(这个函数是从我设置会话变量的ajax调用的)

   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();
}

下面的函数我用来检查会话变量是否存在,这取决于我有一些逻辑。

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;

global $wpdb;
global $post;
global $DOPBSP;
global $DOPBSPWooCommerce;
global $woocommerce;

  if ( is_page( 'cart' ) || is_cart()) {

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

          if($radio == '')
          {
              WC()->customer->set_is_vat_exempt( false );
          }
  }else{
       $radio = WC()->session->get( 'radio_chosen' );
  }
  //echo $radio; die;
if ($radio ==  "option_1") {

    $percentage = 40;

} elseif ($radio == "option_2") {

    $percentage = 0;    
 }
 if ( $woocommerce->cart->get_cart_contents_count() == 1) {

     // 40 %
    $discount = 0;
    foreach ($woocommerce->cart->get_cart() as $cart_item ) {

        $reservations_data = $wpdb->get_results($wpdb->prepare('SELECT * FROM '.$DOPBSPWooCommerce->tables->woocommerce.' WHERE token="%s" AND product_id=%d ORDER BY id',$cart_item['dopbsp_token'], $cart_item['product_id']));
        $main_data = $reservations_data[0]->data;
        $reservation = json_decode($main_data);
        $checkdate = $reservation->check_in;
        $checkoutdate = $reservation->check_out;

        $product_prices_excl_tax[] = wc_get_price_excluding_tax( $cart_item['data'] );

        if($checkdate != '' && $checkoutdate != ''){
            if($checkdate == $checkoutdate){
                //$cart_item['data']->set_tax_class( 'Zero rate' );
                if($percentage == 0){
                      if($radio != ''){
                        WC()->customer->set_is_vat_exempt( true );
                      }
                }else{
                    //echo "Fsf";die;
                     if($radio != ''){
                    WC()->customer->set_is_vat_exempt( false );
                     }
                }
            }
            else{
                $product = wc_get_product( $cart_item['product_id'] );
                $price = $product->get_price();
                $timeDiff = abs(strtotime($checkoutdate) - strtotime($checkdate));
                $numberDays = $timeDiff/86400;
                $numberDays1 = intval($numberDays);
                $main_discount = $price * $percentage / 100;
                $discount = $main_discount * $numberDays1;

                $woocommerce->cart->add_fee( "Rabais (".$percentage."%)", -$discount );
                if($percentage == 0){
                    if($radio != ''){
                    WC()->customer->set_is_vat_exempt( true );
                    }
                }else{
                    if($radio != ''){
                    WC()->customer->set_is_vat_exempt( false );
                    }
                }
            }
        }
    }
}

//wp_die();
}

现在真正的问题是,在刷新页面时,我检查我得到会话变量,但它没有显示效果,而且在刷新页面 Ajax 后第一次也不起作用。

任何帮助都会很棒。

标签: phpwordpresswoocommercehook-woocommerce

解决方案


推荐阅读