Il reindirizzamento non funziona nella funzione ajax
Sto utilizzando ajax per inviare i dati del form. Alla fine voglio reindirizzare alla homepage. Sto provando il seguente codice, ma non funziona. Restituisce l'errore 302. Come posso effettuare il reindirizzamento nella seguente funzione? Grazie.
add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');
function custom_register(){
//elaborazione dei dati
wp_redirect( home_url() );
exit;
}

La richiesta AJAX viene eseguita in background. I reindirizzamenti qui non influenzano la pagina principale. E il 302 non è un errore, è semplicemente un codice di stato.
La tua risposta AJAX dovrebbe restituire alla pagina chiamante l'URL e il codice di stato oppure semplicemente un numero come 1. Poi gestisci il reindirizzamento nella pagina chiamante:
jQuery( document ).ready( function( $ ) {
var url = '<?php echo home_url(); ?>';
$( '#ajaxtrigger' ).on( 'click',
function() {
$.post( ajaxurl, {}, function( response ) {
if ( 1 == response )
top.location.replace(url);
});
return false;
}
);
});

Sono passati alcuni anni ma penso che questa risposta possa aiutare altri:
Ho utilizzato una funzione per reindirizzare da una chiamata AJAX in JS. Prima imposta alcuni valori nel database e poi prova a reindirizzare in questo modo:
if (wp_safe_redirect( $url ))
exit();
Ma restituisce semplicemente la stessa pagina seguita da 'undefined'.
Alla fine ho risolto gestendo direttamente il reindirizzamento in JS:
window.location.href = url; // mantiene la cronologia della pagina
Funziona anche:
window.location.replace( url ); // pulisce la cronologia della pagina

Se vuoi effettuare un reindirizzamento, utilizza JavaScript window.location="your url"
nel tuo codice PHP.
Prova questo nella tua funzione chiamata dalla richiesta AJAX:
add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');
function custom_register(){
//elaborazione
$url = home_url();
?>
<script>
demo(); //nome della funzione JavaScript
function demo()
{
window.location="<?php echo $url ?>";
}
</script>
<?php exit;
}
