Formular personalizat, shortcode și gestionar de trimitere - Rezolvare eroare 404

27 apr. 2011, 23:19:43
Vizualizări: 5.94K
Voturi: 4

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.

2
Comentarii

Care este codul tău de formular?

Bainternet Bainternet
28 apr. 2011 09:14:09

@bainternet aici: http://pastebin.com/fXvyuwnx

ariefbayu ariefbayu
28 apr. 2011 09:22:52
Toate răspunsurile la întrebare 3
1

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.

28 apr. 2011 06:05:42
Comentarii

Nu am câmpul 'name' în formularul meu.

ariefbayu ariefbayu
28 apr. 2011 06:40:03
4

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

1 mai 2011 17:36:28
Comentarii

tot nu funcționează T_T

ariefbayu ariefbayu
1 mai 2011 22:19:55

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

Norcross Norcross
2 mai 2011 00:29:48

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.

ariefbayu ariefbayu
2 mai 2011 01:13:35

ups, ai dat click greșit. Ei bine, este ziua ta norocoasă să primești +50 reputații ;))

ariefbayu ariefbayu
2 mai 2011 04:18:10
2

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 );
1 mai 2011 22:52:34
Comentarii

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;.

Jan Fabry Jan Fabry
4 mai 2011 15:27:33

Cumva am reușit să funcționeze. Am încercat wp_redirect(); exit; Ciudat, nu?

ariefbayu ariefbayu
4 mai 2011 22:53:00