redirect nu funcționează în funcția ajax
Folosesc Ajax pentru a trimite datele din formular. La final vreau să redirecționez către pagina principală. Încerc următorul cod, dar nu funcționează. Returnează eroarea 302. Cum pot face redirecționarea în următoarea funcție? Mulțumesc.
add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');
function custom_register(){
//procesare
wp_redirect( home_url() );
exit;
}

Solicitarea AJAX rulează în fundal. Redirecționările de aici nu afectează pagina principală. Iar codul de stare 302 nu este o eroare, este doar un cod de stare.
Răspunsul AJAX ar trebui să returneze fie URL-ul și codul de stare către pagina apelantă, fie doar un număr precum 1. Apoi gestionați redirecționarea în pagina apelantă:
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;
}
);
});

Sunt câțiva ani în urmă, dar cred că acest răspuns poate ajuta pe alții:
Am folosit o funcție pentru a redirecționa dintr-un apel AJAX JS. Mai întâi, setează câteva valori în baza de date și apoi încearcă să redirecționeze în acest fel:
if (wp_safe_redirect( $url ))
exit();
Dar doar returnează aceeași pagină urmată de 'undefined'.
Am rezolvat în final partea de redirecționare direct în JS:
window.location.href = url; // păstrează istoricul paginii
Funcționează și:
window.location.replace( url ); // curăță istoricul paginii

Dacă dorești să faci o redirecționare, folosește JavaScript window.location="your url"
în codul tău PHP.
Încearcă asta în funcția apelată prin cererea AJAX:
add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');
function custom_register(){
//procesare
$url = home_url();
?>
<script>
demo(); //numele funcției JavaScript
function demo()
{
window.location="<?php echo $url ?>";
}
</script>
<?php exit;
}
