Formular personalizat, shortcode și gestionar de trimitere - Rezolvare eroare 404
Am un formular în frontend cu mai multe câmpuri de input. Cerințele mele mă obligă să folosesc un shortcode personalizat pentru a crea formularul. Am testat deja o pagină cu acel shortcode.
Iată codul meu:
<form name="myform" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" enctype="multipart/form-data">
Bazat pe acest cod, ar trebui să redeschidă aceeași pagină (și a făcut-o). Totuși, când apăs pe submit, primesc eroare 404 pe exact același URL. Există vreo soluție?
ACTUALIZARE #1
Am încercat o altă abordare, folosind 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'] ) )
{
//execută codul meu aici
wp_redirect( get_permalink(35) );//pagina care are [shortcode]
}
}
Această metodă rulează cu succes acțiunea dorită la trimitere. Dar! după redirecționare, tot primesc eroare 404. Nu înțeleg ce este greșit.
Formularul tău are un câmp de introducere cu numele "name"? De exemplu:
<input type="text" name="name">
Dacă da, acest lucru va cauza probleme. Schimbă valoarea atributului name.
Vezi și: Formularul 'name' se defectează și duce la pagina 404.

Presupun că linia de la final
wp_redirect( get_permalink(35) );//pagina care conține formularul
este cea care nu funcționează. Aș schimba-o în asta
$redirect_link = get_permalink(35) ; //pagina care conține formularul
wp_redirect( $redirect_link ); // declanșează redirecționarea
exit;
acest lucru ar trebui să determine funcția să funcționeze corect

Care este linkul care dă eroarea 404, mai exact? Adică care este URL-ul paginii încercate de redire care duce la eroarea 404?

vine de la example.com/?page_id=35 și la trimitere, merge la example.com/?page_id=35. După procesare, ar trebui să redirecționeze către example.com/?page_id=35 astfel încât atunci când utilizatorul apasă refresh, să nu aibă niciun efect asupra site-ului.

Eu folosesc die()
ca soluție. Totuși, nu o prefer.
$redirect_link = get_permalink(35) ; //pagina care conține formularul
$script_redirect = "<div>Formularul tău a fost trimis. Te rugăm să aștepți un moment. Dacă browserul tău nu te redirecționează automat, dă click <a href='$redirect_link'>aici</a>.</div>
<script type='text/javasript' language='javascript'>
window.location = '$redirect_link';
</script> ";
die( $script_redirect );

Funcționează dacă adaugi die()
după apelul la wp_redirect()
? Simplu apel al redirect-ului nu oprește execuția scriptului. Vezi acest pattern și în codul de bază: wp_redirect( $somewhere ); exit;
.
