Supporto » Sviluppare con WordPress » Variabile vuota POST ajax

  • Buona sera a tutti.

    Sto creando una funzione custom per cambiare le immagini dei prodotti in base all’anno che si sceglie.

    nel function php ho inserito la dichiarazione della funzione con questo codice:

    function load_scripts_anno(){
    
    global $product;
    $sku = $product->sku;	
    wp_register_script('anno_prodotto', get_template_directory_uri().'-child/js/anno_prodotto.js', false, false, true );
    wp_enqueue_script('anno_prodotto');
    wp_localize_script('anno_prodotto', 'my_vars', array(
          'ajaxurl' => admin_url( 'admin-ajax.php' ),
          'nonce' => wp_create_nonce( 'gp-table-comparation-2022' ),
    	  'codice_prodotto' => $sku
         ));    
    }
    add_action('wp_enqueue_scripts','load_scripts_anno');

    nel file js ho inserito questo:

    jQuery(document).ready(function($) {
    $('#scegli_anno').click(function(e) {
      
    	$('body').addClass('wait');
    	
    	e.preventDefault();
    	
    	var anno = $(this).val(); // carica la variabile della select
    
    	$.ajax({
            //  type : "POST", 
    		  url: my_vars.ajaxurl, // Since WP 2.8 ajaxurl is always defined and points to admin-ajax.php
    		  data: {
                  action :'select_image', // il nome della funzione de deve richiamare
    			  _nonce : my_vars.nonce, //il codice casuale che viene generato nel setting AJAX in function.php
                  anno : anno, // variabile da trasmettere alla funzione
    			  codice : my_vars.codice_prodotto
              },
    		// cache: false,
             success:function(data) {
    			 
                  $("#custom_image").html(data); // Restituisce il risultato della richiesta ajax (The Callback) - Viene mostrato nel div settato
    			  $('body').removeClass('wait');
    			
              },
              error: function(errorThrown){
                  window.alert(errorThrown);
              }
          });
    	
    });
    	
    });

    e poi di nuovo nel function.php quest’altro:

    
    //funzione richiamata da ajax
    function select_image() {
    
    	
    	
    if ( !wp_verify_nonce($_REQUEST ['_nonce'], 'gp-table-comparation-2022' )){
       die('Autorizzazione non concessa');
     }
    	 if ( isset($_REQUEST) ) {
            $anno = $_REQUEST['anno'];
    		$codice = $_REQUEST['codice_prodotto'];
    		immagini($anno, $codice);
    	}
    	
        
      // die(); // Always die in functions echoing AJAX content
    }
    add_action( 'wp_ajax_select_image', 'select_image' ); //azione eseguibile solo da utenti loggati
    add_action( 'wp_ajax_nopriv_select_image', 'select_image' ); // azione eseguibile da tutti
    

    che richiama quest’altra funzione

    //carica l'immagine del prodotto selezionato
    function immagini($anno, $codice) {
    	
    	global $product;
    	
    	if (!$codice) {
    		$codice = $product->sku;
        }
    	
    	if (!$anno){
    		$anno = '2022';
    	}
    	
    	$php_file = 'immagini_prodotto.php';
    	include_once get_template_directory() . '-child/functions/'.$php_file.'';
    	load_image($anno, $codice);
    	
    }

    Funziona tutto correttamente tranne il fatto che lo sku del prodotto non mi viene restituito affatto.

    Ho provato anche a caricare direttamente lo sku tramite la variabile globale dalla pagina immagini_prodotto.php ma il risultato non cambia.

    Dove sbaglio? potete darmi una mano?

  • Devi essere collegato per rispondere a questo topic.