Soporte » WordPress Avanzado » Utilizar variables de sesión con AJAX sin recargar la página

  • kenyolo

    (@kenyolo)


    Hola! Estoy intentado pasar un filtro a través de una variable de sesión sin tener que recargar la página de checkout. La idea es que al seleccionar un input radio cargue o no el filtro que aplica un pago extra. He conseguido que cada vez que se recargue la página coja el valor anterior, pero necesito que no haya que recargar y se cargue automáticamente al seleccionarlo, ¿como puedo hacerlo?

    add_action( 'wp_footer', 'wpmc_set_session_on_button_click' );
    function wpmc_set_session_on_button_click() {
    	
    	session_start();
    	$array_selectores = $_SESSION['array_selectores'];
    	$json = json_encode($array_selectores);
        ?>
        <script>
            document.querySelectorAll('input[name="horario-liga"]').forEach(function(input) {
    			
        input.addEventListener("change", function(e) {
    		var jsArray = <?php echo $json; ?>;
            var horarioLigaValue = document.querySelector('input[name="horario-liga"]:checked').value;
            
            var data = {
                action: 'wpmc_set_session',
                dto_manana: 'dto'
            };
    		var data2 = {
                action: 'wpmc_set_session',
                dto_manana: 'no'
            };
          if (jsArray.includes(horarioLigaValue)) {
            jQuery.post(
                '<?php echo admin_url('admin-ajax.php'); ?>',
                data,
                function(response) {
                    console.log(response);
                    //console.log('dto');
                }
            );
    		
    	  }
    	else {
    		jQuery.post(
                '<?php echo admin_url('admin-ajax.php'); ?>',
                data2,
                function(response) {
                    console.log(response);
                    //console.log('no');
                }
            );
    	}
        });
    });
        </script>
        <?php
    }
    
    // Manejador de petición AJAX para establecer la variable de sesión
    add_action( 'wp_ajax_wpmc_set_session', 'wpmc_ajax_set_session' );
    add_action( 'wp_ajax_nopriv_wpmc_set_session', 'wpmc_ajax_set_session' );
    function wpmc_ajax_set_session() {
    	error_log(print_r($_POST, true));
    	echo $_POST['dto_manana'];
    	
    	WC()->session->set( 'dto_manana', $_POST['dto_manana'] );
    		
        wp_die();
    }
    
    add_action( 'woocommerce_review_order_before_payment', 'detectar_radio_button_seleccionado' );
    function detectar_radio_button_seleccionado() {
    	    
    	$dto_manana = WC()->session->get('dto_manana');
    		
        if (isset($dto_manana)) {
            echo $dto_manana;
        }
    }
    
    add_filter('woocommerce_cart_calculate_fees', 'add_recurring_postage_fees',10,1);
    function add_recurring_postage_fees( $cart ) {
    
    	$dto_manana = WC()->session->get('dto_manana');
    		
        if ( (! empty( $cart->recurring_cart_key )) && ($dto_manana == 'dto') ) {
            $cart->add_fee( 'Postage', 5 );
        }
    }
  • El debate ‘Utilizar variables de sesión con AJAX sin recargar la página’ está cerrado a nuevas respuestas.