Cómo capturar/qué hacer con un objeto WP Error
Estoy ejecutando algunas funciones de WP directamente dentro de un plugin, incluyendo wp_insert_post(), si algo sale mal, esto devuelve un objeto WP Error, ¿cuál es el método correcto para capturar este error? Ya sea usando funciones integradas de WP o excepciones de PHP u otros métodos...
Asignar el retorno de la función a una variable.
Verificar la variable con
is_wp_error()
.Si es
true
, manejarlo adecuadamente, por ejemplo usandotrigger_error()
con el mensaje del métodoWP_Error->get_error_message()
.Si es
false
, continuar normalmente.
Uso:
function create_custom_post() {
$postarr = array();
$post = wp_insert_post($postarr);
return $post;
}
$result = create_custom_post();
if ( is_wp_error($result) ){
echo $result->get_error_message();
}

Hola,
primero, verificas si tu resultado es un objeto WP_Error
o no:
$id = wp_insert_post(...);
if (is_wp_error($id)) {
$errors = $id->get_error_messages();
foreach ($errors as $error) {
echo $error; //esto es solo un ejemplo y generalmente no es una buena idea, deberías implementar medios para procesar los errores más adelante y usar los hooks de errores/mensajes de WP para mostrarlos
}
}
Esta es la forma habitual.
Pero el objeto WP_Error puede ser instanciado sin que ocurra ningún error, solo para actuar como un almacén general de errores por si acaso. Si quieres hacerlo, puedes verificar si hay errores usando get_error_code()
:
function my_func() {
$errors = new WP_Error();
... //hacemos algunas cosas
if (....) $errors->add('1', 'Mi error personalizado'); //bajo alguna condición almacenamos un error
.... //hacemos más cosas
if (...) $errors->add('5', 'Mi otro error personalizado'); //bajo alguna condición almacenamos otro error
.... //y hacemos más cosas
if ($errors->get_error_code()) return $errors; //el siguiente código es vital, así que antes de continuar necesitamos verificar si ha habido errores... si es así, devolvemos el objeto de error
.... // hacemos cosas vitales
return $my_func_result; // devolvemos el resultado real
}
Si haces eso, puedes luego verificar y procesar el error devuelto como en el ejemplo de wp_insert_post()
anterior.
La Clase está documentada en el Codex.
Y también hay un pequeño artículo aquí.
