Formulario personalizado, shortcode y manejador de envío

27 abr 2011, 23:19:43
Vistas: 5.94K
Votos: 4

Tengo un formulario en el frontend con varios campos. Mis requisitos me obligan a usar un shortcode personalizado para crear el formulario. Ya he probado una página con ese shortcode.

Aquí está mi código:

<form name="myform" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" enctype="multipart/form-data">

Basado en esto, debería abrir la misma página (y lo hizo). Sin embargo, cuando hago clic en enviar, obtengo un error 404 en esa misma URL. ¿Hay alguna solución?

ACTUALIZACIÓN #1

Intento una ruta diferente, 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'] ) )
    {
        //ejecutar mi código aquí
        wp_redirect( get_permalink(35) );//página que tiene [shortcode]
    }
}

Esto ejecuta correctamente mi acción deseada al enviar. ¡Pero! tras la redirección, sigue apareciendo el error 404. No sé qué está mal.

2
Comentarios

¿Cuál es tu código de formulario?

Bainternet Bainternet
28 abr 2011 09:14:09

@bainternet aquí: http://pastebin.com/fXvyuwnx

ariefbayu ariefbayu
28 abr 2011 09:22:52
Todas las respuestas a la pregunta 3
1

¿Tu formulario tiene un campo de entrada con el nombre "name"? Por ejemplo:

<input type="text" name="name">

Si es así, eso causará problemas. Cambia el valor del atributo name.

Ver también: El atributo 'name' en formularios rompe y redirige a página 404.

28 abr 2011 06:05:42
Comentarios

No tengo 'name' en mi formulario.

ariefbayu ariefbayu
28 abr 2011 06:40:03
4

Asumo que la línea cerca del final

wp_redirect( get_permalink(35) );//página que contiene el formulario

es lo que está fallando. Lo cambiaría a esto

$redirect_link =  get_permalink(35) ; //página que contiene el formulario
wp_redirect( $redirect_link );  // activar redirección
exit;

eso debería hacer que la función funcione correctamente

1 may 2011 17:36:28
Comentarios

tampoco funciona T_T

ariefbayu ariefbayu
1 may 2011 22:19:55

¿Cuál es el enlace 404, específicamente? es decir, ¿cuál es la URL de la página a la que intenta redirigir y por lo tanto da error 404?

Norcross Norcross
2 may 2011 00:29:48

viene de example.com/?page_id=35 y al enviar, va a example.com/?page_id=35. Después del proceso, debería redirigir a example.com/?page_id=35 para que cuando el usuario actualice, no tenga ningún efecto en el sitio.

ariefbayu ariefbayu
2 may 2011 01:13:35

Uy, clic equivocado. Bueno, es tu día de suerte para obtener +50 reps ;))

ariefbayu ariefbayu
2 may 2011 04:18:10
2

Tomo die() como solución. Aunque no es mi preferida.

$redirect_link =  get_permalink(35); //página que contiene el formulario
$script_redirect = "<div>Tu formulario ha sido enviado. Por favor espera un momento. Si tu navegador no redirige, haz clic <a href='$redirect_link'>aquí</a>.</div>
<script type='text/javascript' language='javascript'> 
    window.location = '$redirect_link';
</script> ";
die($script_redirect);
1 may 2011 22:52:34
Comentarios

¿Funciona si agregas el die() después de tu llamada a wp_redirect()? Solo llamar al redirect no detiene la ejecución del script. También puedes ver este patrón en el código core: wp_redirect( $somewhere ); exit;.

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

De alguna manera lo haremos funcionar. Probé con wp_redirect(); exit; ¿Raro, verdad?

ariefbayu ariefbayu
4 may 2011 22:53:00