¿Cómo mostrar mensajes de error usando la clase WP_Error?

4 feb 2013, 06:53:47
Vistas: 28.6K
Votos: 3

Tengo un código de formulario de registro en mi archivo functions.php como este

if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action']) && $_POST['action'] == 'registration') {
       $error = new WP_Error();
        if (empty(esc_attr($_POST['email'])))
        {
            $error->add('regerror','El email es obligatorio.');
        }
        if (!is_email(esc_attr($_POST['email'])))
        {
            $error->add('regerror','Formato de email inválido.');

        }
        if (email_exists(esc_attr($_POST['email'])))
        {
            $error->add('regerror','El email ya está en uso. ¿Olvidaste tu contraseña? Si es así, haz clic aquí para restablecerla.');

        }
}

¿Ahora alguien puede decirme cómo mostrar esos mensajes de error en mi página de registro?

Actualización:

Mi página de registro tiene un código como este

<form method="post" action="<?php the_permalink(); ?>">
<!-- aquí van los campos del formulario -->
<input name="action" type="hidden" value="registration" />
<input type="submit" id="submit" value="Registrar">
</form>
2
Comentarios

¿Eso es todo? Seguramente hay más código. ¿Esto debe estar en una función, no? ¿Está enlazado a algo? ¿Se llama directamente? ¿Qué?

s_ha_dum s_ha_dum
4 feb 2013 07:16:23

@s_ha_dum Por favor, revisa mi actualización. No es una función. Mi bucle if verifica el parámetro de acción. Si action == registration entonces el código se ejecutará. No está enlazado a nada. Y sí, tengo algunos códigos adicionales también en mi bucle if. Solo lo recorté para hacer la pregunta más simple.

PrivateUser PrivateUser
4 feb 2013 07:24:49
Todas las respuestas a la pregunta 1
1

Con eso en el functions.php probablemente tendrías que declarar $error como global así:

if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action']) && $_POST['action'] == 'registration') {
    global $error;
    $error = new WP_Error();
    // el resto de tu código

Y luego hacer global $error; nuevamente en tu página de registro antes de intentar usarlo.

Pero no entiendo por qué tienes ese código en functions.php. Eso me parece un mal diseño. Estás ejecutando ese condicional if cada vez que se carga cualquier página y parece que solo lo necesitas en tu página de registro, asumiendo que es algo que has escrito tú mismo y que no te refieres a la página de registro/inicio de sesión incorporada en wp-login.php. Dado ese supuesto, simplemente mueve ese código a la página de registro y estará disponible sin problemas. WP_Error tiene métodos que te permitirán acceder a los datos.

4 feb 2013 07:40:15
Comentarios

Gracias. Moveré el código a mi página de registro como me aconsejaste.

PrivateUser PrivateUser
4 feb 2013 07:57:04