Come creare un form personalizzato con shortcode e gestire l'invio
Ho un form frontend con diversi input. I miei requisiti mi obbligano a usare uno shortcode personalizzato per creare il form. Ho già testato una pagina con quello shortcode.
Ecco il mio codice:
<form name="myform" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" enctype="multipart/form-data">
In base a questo, dovrebbe riaprire la stessa pagina (e lo ha fatto). Tuttavia, quando premo invio, ottengo un errore 404 sullo stesso URL. Esiste una soluzione?
AGGIORNAMENTO #1
Provo una strada diversa, usando add_action('init'):
add_action('init', 'mbro1_intercept_form_input');
function mbro1_intercept_form_input()
{
if( !(isset($_POST['action_code']) && $_POST['action_code'] == 'mbro_intercept_form_input') )
return "";
if( isset( $_POST['submit'] ) )
{
//eseguo il mio codice qui
wp_redirect( get_permalink(35) ); //pagina che contiene [shortcode]
}
}
Questo esegue con successo l'azione prevista all'invio. Ma! dopo il reindirizzamento, ottengo ancora 404. Non capisco cosa sia sbagliato.
Il tuo modulo ha un campo di input con il nome "name"? Ad esempio:
<input type="text" name="name">
Se è così, causerà problemi. Cambia il valore del nome.
Vedi anche: Il 'name' del modulo si interrompe e va alla pagina 404.

Suppongo che la riga vicino alla fine
wp_redirect( get_permalink(35) );//pagina che contiene il modulo
sia quella che non funziona. Lo cambierei in questo modo
$redirect_link = get_permalink(35) ; //pagina che contiene il modulo
wp_redirect( $redirect_link ); // attiva il redirect
exit;
questo dovrebbe far funzionare correttamente la funzione

Qual è il link 404, nello specifico? cioè qual è l'URL della pagina a cui sta cercando di reindirizzare e quindi dà errore 404?

proviene da example.com/?page_id=35 e al submit, va su example.com/?page_id=35. Dopo l'elaborazione, dovrebbe reindirizzare a example.com/?page_id=35 in modo che quando l'utente preme aggiorna, non abbia alcun effetto sul sito.

Prendo die()
come soluzione. Anche se non è la mia preferita.
$redirect_link = get_permalink(35) ; //pagina che contiene il modulo
$script_redirect = "<div>Il tuo modulo è stato inviato. Attendi un momento. Se il browser non reindirizza automaticamente, clicca <a href='$redirect_link'>qui</a>.</div>
<script type='text/javasript' language='javascript'>
window.location = '$redirect_link';
</script> ";
die( $script_redirect );

Funziona se aggiungi die()
dopo la chiamata a wp_redirect()
? Chiamare semplicemente il redirect non interrompe l'esecuzione dello script. Vedrai questo pattern anche nel codice core: wp_redirect( $somewhere ); exit;
.
