Advertisement
  1. Code
  2. WordPress

Manejo de errores de WordPress con WP_Error Clase II

Scroll to top
Read Time: 7 min
This post is part of a series called WordPress Error Handling.
WordPress Error Handling with WP_Error Class I

Spanish (Español) translation by Marilu (you can also view the original English article)

En la primera parte de esta serie sobre el manejo de errores en WordPress con la clase WP_Error, echamos un vistazo a una introducción de la clase PHP, examinamos las propiedades y métodos de la clase y sus roles y funciones complementadas con ejemplos de código.

En esta parte final de la serie, construiremos un plugin de formulario de contacto bastante simple para demostrar cómo manejar los errores en el desarrollo del plugin. El plugin de formulario de contacto tendrá soporte para etiquetas de código corto y de plantilla, de modo que pueda ser implementado en posts y páginas usando el primero y en un tema usando el segundo.

Desarrollo del plugin del Contact Form (formulario de contacto)

El formulario de contacto consistirá en cinco campos de formulario, cuatro elementos de input (entrada) y un elemento de textarea (área de texto).

Estoy seguro de que estás familiarizado con todo el campo del formulario de contacto. Ten en cuenta que cuando se envía un correo electrónico a través del formulario de contacto, el número de teléfono se adjunta al mensaje. Esto es evidente en la función send_mail.

Empecemos a codificar el plugin. Primero el encabezado del plugin:

1
<?php
2
/*

3
 Plugin Name: Contact Form Lite

4
 Plugin URI: https://code.tutsplus.com

5
 Description: Easy contact form plugin

6
 Author: Agbonghama Collins

7
 Author URI: http://tech4sky.com

8
 */

El plugin consistirá en cinco funciones PHP como se describe a continuación:

  1. contact_html_form() contendrá el código del formulario HTML del plugin.
  2. validate_form() maneja el error del plugin. veremos el manejo del error usando WP_Error en acción en esta función.
  3. send_mail() se encarga del envío de correo electrónico.
  4. contact_form_function() reúne y procesa las funciones anteriores
  5. contact_form_shortcode() es la función de devolución de llamadas por código abreviado.

El código del formulario HTML del plugin contenido en la función contact_html_form() es el siguiente.

1
function contact_html_form() {
2
    global $name, $email, $phone_number, $subject, $message;
3
    
4
	echo '<form action="' . get_permalink() . '" method="post">

5
	

6
	<label for="name">Name <strong>*</strong></label>

7
	<input type="text" name="sender_name" value="' . ( isset( $_POST['sender_name'] ) ? $name : null ) . '" />

8
	

9
	<div>

10
	<label for="email">Email <strong>*</strong></label>

11
	<input type="text" name="sender_email" value="' . ( isset( $_POST['sender_email'] ) ? $email : null ) . '" />

12
	</div>

13
	

14
	<div>

15
	<label for="phonenumber">Phone Number <strong>*</strong></label>

16
	<input type="text" name="sender_phonenumber" value="' . ( isset( $_POST['sender_phonenumber'] ) ? $phone_number : null ) . '" />

17
	</div>

18
	

19
	<div>

20
	<label for="subject">Subject <strong>*</strong></label>

21
	<input type="text" name="email_subject" value="' . ( isset( $_POST['email_subject'] ) ? $subject : null ) . '" />

22
	</div>

23
	

24
	<div>

25
	<label for="message">Message <strong>*</strong></label>

26
	<textarea name="email_message">' . ( isset( $_POST['email_message'] ) ? $message : null ) . '</textarea>

27
	</div>

28
	

29
	<div>

30
	<input type="submit" name="send_message" value="Send" />

31
	</div>

32
	</form>';
33
}

A continuación, la función de tratamiento de errores validate_form().

A continuación se indican las restricciones que debe aplicar el plugin y que se aplicarán mediante la función de error handling (tratamiento de errores).

Fíjate en eso:

  • ningún campo debe dejarse vacío
  • el campo del nombre debe contener un carácter alfabético
  • el correo electrónico debe ser válido
  • el número de teléfono debe ser numérico

La función validate_form() aceptará los campos de formulario como su argumento para poder validar los datos de formulario para los errores. A continuación se muestra el código de la función de manejo de errores que hace cumplir la restricción del plugin anterior, completamente comentada para que puedas rastrear fácilmente su código

1
function validate_form( $name, $email, $phone_number, $subject, $message ) {
2
3
    // Make the WP_Error object global    

4
	global $form_error;
5
	
6
	// instantiate the class

7
	$form_error = new WP_Error;
8
	
9
	// If any field is left empty, add the error message to the error object

10
	if ( empty( $name ) || empty( $email ) || empty( $phone_number ) || empty( $subject ) || empty( $message ) ) {
11
		$form_error->add( 'field', 'No field should be left empty' );
12
	}
13
	
14
	// if the name field isn't alphabetic, add the error message

15
	if ( ! ctype_alpha( $name ) ) {
16
		$form_error->add( 'invalid_name', 'Invalid name entered' );
17
	}
18
	
19
	// Check if the email is valid

20
	if ( ! is_email( $email ) ) {
21
		$form_error->add( 'invalid_email', 'Email is not valid' );
22
	}
23
	
24
	// if phone number isn't numeric, throw an error

25
	if ( ! is_numeric( $phone_number ) ) {
26
		$form_error->add( 'phone_number', 'Phone-number is not numbers' );
27
	}
28
	
29
	// if $form_error is WordPress Error, loop through the error object

30
	// and echo the error

31
	if ( is_wp_error( $form_error ) ) {
32
		foreach ( $form_error->get_error_messages() as $error ) {
33
			echo '<div>';
34
			echo '<strong>ERROR</strong>:';
35
			echo $error . '<br/>';
36
			echo '</div>';
37
		}
38
	}
39
40
}

La función send_mail gestiona el envío de correo electrónico.

1
function send_mail( $name, $email, $phone_number, $subject, $message ) {
2
    global $form_error;
3
    
4
	// Ensure WP_Error object ($form_error) contain no error

5
	if ( 1 > count( $form_error->get_error_messages() ) ) {
6
			
7
		// sanitize user form input

8
		$name 			= 	sanitize_text_field( $name );
9
		$email 			= 	sanitize_email( $email );
10
		$phone_number 	= 	esc_attr( $phone_number );
11
		$subject 		= 	sanitize_text_field( $subject );
12
		$message 		= 	esc_textarea( $message );
13
		
14
		// set the variable argument use by the wp_mail

15
		$message 	.= 	'\n Phone Number:' . $phone_number;
16
		$to 		= 	'admin@tech4sky.com';
17
		$headers 	= 	"From: $name <$email>" . "\r\n";
18
		
19
		// If email has been process for sending, display a success message	

20
		if ( wp_mail( $to, $subject, $message, $headers ) ) {
21
			echo "Thanks for contacting me.";
22
		}
23
24
	}
25
}

Echemos un vistazo a lo que está pasando en la función send_mail.

Primero, el objeto $form_error se hace global para que se pueda acceder a él fuera del ámbito de la función. Se hace una comprobación para asegurar que el objeto $form_error no contiene ningún mensaje de error. Si es verdadero, la entrada del formulario de contacto se desinfecta.

La variable $to almacena la dirección de correo electrónico a la que se enviará el mensaje enviado a través del formulario de contacto. En un plugin estándar de formulario de contacto, la variable debe contener el correo electrónico del administrador de WordPress recuperado de la base de datos o de la configuración del plugin.

Toma nota de como el número de teléfono se concatena con el mensaje.

Finalmente, la función wp_mail envía el correo.

La función contact_form_function() procesa la función y también sirve como la etiqueta de la plantilla del plugin

1
function contact_form_function() {
2
    global $name, $email, $phone_number, $subject, $message;
3
	if ( isset($_POST['send_message']) ) {
4
		// Get the form data

5
		$name 			= 	$_POST['sender_name'];
6
		$email 			= 	$_POST['sender_email'];
7
		$phone_number 	= 	$_POST['sender_phonenumber'];
8
		$subject 		= 	$_POST['email_subject'];
9
		$message 		= 	$_POST['email_message'];
10
		
11
		// validate the user form input

12
		validate_form( $name, $email, $phone_number, $subject, $message );
13
		
14
		// send the mail

15
		send_mail( $name, $email, $phone_number, $subject, $message );
16
17
	}
18
	
19
	// display the contact form

20
	contact_html_form();
21
22
}

Recuerda que el plugin de formulario de contacto va a tener soporte de código corto. A continuación se encuentra la función de llamada de shortcode junto con la función add_shortcode que registra el shortcode.

1
// Register a new shortcode: [cf_contact_form]

2
add_shortcode('cf_contact_form', 'contact_form_shortcode');
3
4
// Shortcode callback function

5
function contact_form_shortcode() {
6
    ob_start();
7
    contact_form_function();
8
    return ob_get_clean();
9
}

Usando el plugin

Utilice el atajo [cf_contact_form] para incluir el formulario de contacto en un correo o página.
Para incluir el formulario de contacto en tu tema, usa la etiqueta de la plantilla <?php contact_form_function(); ?> .

Resumen

En este artículo, echamos un vistazo a cómo usar la clase WP_Error para manejar los errores en los plugins. También nos mostré un práctico caso de uso sobre cómo manejar los errores en los plugins usando la clase. Puedes encontrar el archivo de plugin adjunto a este artículo. 

¡Feliz Codificación!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.