1. Code
  2. PHP

Manejo de errores de WordPress con WP_Error Clase I

Incluso si llevas una S en el pecho, cuando se trata de programar, los errores se deslizarán sin duda en tu aplicación. Estos errores son causados por nosotros los programadores como resultado de un error de código o por los usuarios que no están dispuestos a cumplir con las restricciones de la aplicación o del sitio web.
Scroll to top
This post is part of a series called WordPress Error Handling.
WordPress Error Handling with WP_Error Class II

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

Incluso si llevas una S en el pecho, cuando se trata de programar, los errores se deslizarán sin duda en tu aplicación. Estos errores son causados por nosotros los programadores como resultado de un error de código o por los usuarios que no están dispuestos a cumplir con las restricciones de la aplicación o del sitio web.

Los errores causados por los usuarios finales suelen ser más adversos que los provocados por el programador porque los datos o la información introducidos por el usuario son impredecibles.

Por ejemplo, en un campo del formulario de correo electrónico, en lugar de introducir un correo electrónico válido, el usuario podría introducir un texto que no sea de correo electrónico. Si el sitio web carece de un mecanismo sólido de manejo de errores, el usuario puede obtener acceso no autorizado a información sensible.

Dado que el comportamiento de los usuarios no se puede predecir, se puede programar un sitio web o una aplicación para que rechace de plano cualquier dato inválido introducido por el usuario e informe al usuario de que los datos no son válidos. Este proceso es lo que se denomina tratamiento de errores

WordPress se envía con una clase WP_Error que hace que el manejo de errores dentro de los plugins y el propio WordPress sea mucho más fácil.

Entendiendo el WP_Error

La clase WP_Error consta de dos propiedades y ocho métodos. Estas propiedades son utilizadas internamente por la clase y probablemente no necesitarás estas propiedades ya que la mayor parte de la tarea que quieres llevar a cabo se puede realizar utilizando los métodos de la clase.

A continuación están las dos propiedades de clase y lo que hacen.

  • $errors es una matriz que contiene la lista de errores.
  • $error_data es una matriz que contiene la lista de datos para los códigos de error.

Antes de examinar los métodos de la clase, me gustaría explicar estos tres términos utilizados internamente por la clase WP_Error - Code (Código), Message (Mensaje), Data (Datos).

No te preocupes si son difíciles de entender ahora mismo, las cosas se aclaran a medida que examinamos las muestras de código en la sección siguiente.

  • El código es similar a un par de datos key/value (clave/valor) como un array: el código en este sentido es la clave.
  • El Mensaje es el valor de un par key/value (clave/valor) guardado en la propiedad de la clase de errors (errores).
  • Data (datos), como el mensaje anterior, es el valor de una clave ( code ) pero guardado en la propiedad error_data.

Ahora a los métodos de clase y lo que hacen:

  • __construct() es un método mágico de PHP que acepta tres argumentos: code (código), message (mensaje) y data (datos). Pasando el argumento en la instanciación de la clase WP_Error se configura el mensaje de error.
  • get_error_codes() devuelve una lista de todos los códigos de error si están disponibles.
  • get_error_code() recupera el primer código de error y devuelve una cadena, entera o vacía si no hay códigos de error.
  • get_error_messages( $code ) recupera todos los mensajes de error cuando el argumento del code (código) está ausente o los mensajes de error que coinciden con el argumento del code (código). Devuelve una matriz de cadenas de error en caso de éxito, o una matriz vacía en caso de fracaso (si se utiliza el parámetro code (código)).
  • get_error_message( $code ) obtiene un único mensaje de error. Esto obtendrá el primer mensaje disponible para el código. Si no se da ningún código, se utilizará el primer código disponible. Devuelve una cadena de error.
  • get_error_data( $code ) recupera los datos de error para un código de error dado. Devuelve los datos o nulos, si no hay errores.
  • add( $code, $message, $data ) añade más mensajes de error a la lista de mensajes de error.
  • add_data( $data, $code ) añade datos para el código de error. El código de error solo puede contener un dato de error.

Como funciona la clase WP_Error

Para utilizar la clase WP_Error para el tratamiento de errores, primero instala la clase y luego utiliza el método de la clase. Puedes añadir un mensaje de error pasando el code (código), el message (mensaje) y los data (datos) de la instanciación.

1
$my_error = new WP_Error( 'toy', 'my favorite toy is dolly' );

Examinando la estructura del objeto $my_error a través de print_r() revela:

1
WP_Error Object
2
(
3
    [errors] => Array
4
        (
5
            [toy] => Array
6
                (
7
                    [0] => my favorite toy is dolly
8
                )
9
10
        )
11
12
    [error_data] => Array
13
        (
14
        )
15

Observa que nuestro error definido se almacena en la propiedad de la clase de errors (errores) mientras que la propiedad error_data no tiene datos.

Pasando un tercer argumento en la instanciación se crea un dato con el código (first argument (primer argumento)) siendo la clave de la matriz y el tercer argumento (data), el valor de la matriz.

1
<?php
2
$my_error = new WP_Error( 'toy', 'my favorite toy is dolly', 'my best' );
3
print_r( $my_error );

1
WP_Error Object
2
(
3
    [errors] => Array
4
        (
5
            [toy] => Array
6
                (
7
                    [0] => my favorite toy is dolly
8
                )
9
10
        )
11
12
    [error_data] => Array
13
        (
14
            [toy] => my best
15
        )
16
17
)

Para añadir o añadir más mensajes de error a la lista de errores, se utiliza el método de add (añadir) que acepta código, mensaje y datos como argumento del método.

1
<?php
2
$my_error = new WP_Error( 'toy', 'my favorite toy is dolly', 'best toy' );
3
$my_error->add( 'game', 'my favorite game console is PS4' );

Pasando un tercer argumento ((mixed data-type) tipo de datos mezclados) al método add() se añade un dato al código de error.

1
<?php
2
$my_error->add( 'game', 'my favorite game console is PS4', 'best game' );

Usando print_r() de nuevo, veamos la estructura e información de nuestro objeto $my_error WP_Error.

1
WP_Error Object
2
(
3
    [errors] => Array
4
        (
5
            [toy] => Array
6
                (
7
                    [0] => my favorite toy is dolly
8
                )
9
10
            [game] => Array
11
                (
12
                    [0] => my favorite game console is PS4
13
                )
14
15
        )
16
17
    [error_data] => Array
18
        (
19
            [toy] => best toy
20
            [game] => best game
21
        )
22
23
)

El método add_data() también podría utilizarse para añadir estrictamente datos para el código de error. El código de error solo puede contener un dato de error.

1
$my_error->add_data( 'my best teacher is Uncle Sam', 'teacher' );

Hemos aprendido a instanciar y añadir mensajes de error y datos al objeto WP_Error. Veamos cómo recuperar el mensaje de error, el código y los datos.

Usando el método get_error_codes() devuelve una lista de todos los códigos de error.

1
print_r( $my_error->get_error_codes() );
2
/* returns

3
 Array

4
 (

5
 [0] => toy

6
 [1] => game

7
 )

8
 */

Mientras que get_error_code() devuelve solo el primer código de error.

1
print_r( $my_error->get_error_code() ); // toy

El get_error_messages() Recupera todos los mensajes de error cuando el argumento del código está ausente o los mensajes de error que coinciden con el argumento del código.

1
print_r( $my_error->get_error_messages() );
2
/* returns

3
 Array

4
 (

5
 [0] => my favorite toy is dolly

6
 [1] => my favorite game console is PS4

7
 )

8
 */

1
print_r( $my_error->get_error_messages( 'game' ) );
2
/* returns

3


4
 Array

5
(

6
    [0] => my favorite game console is PS4

7
)

8


9
*/

El get_error_message() devuelve un único mensaje de error que coincide con el código. si no hay código, devuelve el primer mensaje de error

1
print_r( $my_error->get_error_message() );
2
// my favorite toy is dolly

El get_error_data() devuelve los datos para el código de error.

1
print_r( $my_error->get_error_data() );
2
// best toy

1
print_r( $my_error->get_error_data( 'teacher' ) );
2
// my best teacher is Uncle Sam

Cuando construyas un plugin, quizás quieras comprobar si una variable es un objeto WP_Error. Aquí es donde is_wp_error() es útil.

Además, tal vez quieras asegurarte de que un objeto WP_Error no contenga ningún mensaje de error antes de que se procese una acción. Por ejemplo, el fragmento de código de abajo comprueba si el objeto $my_error no contiene ningún error. Si es cierto, se repite "No hay error, estamos listos".

1
if ( 1 > count( $my_error->get_error_messages() ) ) {
2
    echo "No error, we're good to go";
3
}

Resumen

En esta primera parte de la serie sobre el manejo de errores en WordPress usando WP_Error, echamos un vistazo a la clase para nosotros, explicando lo que hace cada método de la clase con ejemplos de código.

La segunda parte nos mostrará un caso de uso práctico en el uso de WP_Error para manejar los errores en el desarrollo de los plugins. En realidad estaremos construyendo un plugin de formulario de contacto a medida que avancemos.
Mantente en sintonía, ¡no te lo pierdas!