Cómo capturar/qué hacer con un objeto WP Error

4 mar 2011, 15:58:48
Vistas: 40.5K
Votos: 21

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...

1
Comentarios

Para añadir y aclarar lo que se dice en las respuestas aquí, WP_Error no es un objeto Exception de PHP. No se utilizan métodos try/catch con él. Pero como se menciona, hay funciones de conveniencia para facilitar su uso.

Dougal Campbell Dougal Campbell
4 mar 2011 22:17:56
Todas las respuestas a la pregunta 3
0
33
  1. Asignar el retorno de la función a una variable.

  2. Verificar la variable con is_wp_error().

  3. Si es true, manejarlo adecuadamente, por ejemplo usando trigger_error() con el mensaje del método WP_Error->get_error_message().

  4. 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();
}
4 mar 2011 16:08:02
1
14

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í.

4 mar 2011 16:13:19
Comentarios

¡Gracias! Tu primer fragmento de código funcionó para wp_insert_user.

Mohammad Mursaleen Mohammad Mursaleen
17 dic 2014 12:37:54
0
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Esto te mostrará exactamente qué está fallando en la función de inserción de entradas de WordPress. ¡Solo inténtalo!

20 abr 2011 00:02:20