У меня есть код в файле function.php. У меня есть функция ajax, где я устанавливаю переменную в сеансе, и я использую это в некотором хуке в function.php.
AJAX:
<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 не работает в первый раз.
Любая помощь будет отличной.