Cómo atrapar / qué hacer con un objeto de error de WP

15

Estoy ejecutando algunas de las funciones de WP directamente dentro de un complemento, incluido wp_insert_post (), si algo sale mal, esto devuelve un objeto de error de WP, ¿cuál es el método correcto para detectar este error? Ya sea utilizando funciones WP incorporadas o excepciones PHP o cualquier otra cosa ...

Dunhamzzz
fuente
44
Solo para agregar y aclarar lo que se dice en las respuestas aquí, noWP_Error es un objeto PHP . No usas métodos con él. Pero como se señaló, hay funciones de conveniencia para que sea fácil de usar. Exceptiontry/catch
Dougal Campbell

Respuestas:

21
  1. Asigne el retorno de la función a la variable.

  2. Verifique la variable con is_wp_error().

  3. Si se truemaneja en consecuencia, por ejemplo trigger_error()con mensaje del WP_Error->get_error_message()método.

  4. Si false, proceda como de costumbre.

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();
}
Rarst
fuente
11

Hei

primero, verificas si tu resultado es un WP_Errorobjeto o no:

$id = wp_insert_post(...);
if (is_wp_error($id)) {
    $errors = $id->get_error_messages();
    foreach ($errors as $error) {
        echo $error; //this is just an example and generally not a good idea, you should implement means of processing the errors further down the track and using WP's error/message hooks to display them
    }
}

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 de error general por si acaso. Si desea hacerlo, puede verificar si hay algún error utilizando get_error_code():

function my_func() {
    $errors = new WP_Error();
    ... //we do some stuff
    if (....) $errors->add('1', 'My custom error'); //under some condition we store an error
    .... //we do some more stuff
    if (...) $errors->add('5', 'My other custom error'); //under some condition we store another error
    .... //and we do more stuff
    if ($errors->get_error_code()) return $errors; //the following code is vital, so before continuing we need to check if there's been errors...if so, return the error object
    .... // do vital stuff
    return $my_func_result; // return the real result
}

Si hace eso, puede verificar si hay un proceso del error devuelto tal como en el wp_insert_post()ejemplo anterior.

La clase está documentada en el Codex .
Y también hay un pequeño artículo aquí .

wyrfel
fuente
¡Gracias! Su primer fragmento hizo el trabajo para wp_insert_user.
Mohammad Mursaleen
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Esto le mostrará exactamente lo que está mal con la función de inserción posterior de WordPress. solo inténtalo !


fuente