Comment attraper / quoi faire avec un objet d'erreur WP

15

J'exécute certaines des fonctions WP directement dans un plugin, y compris wp_insert_post (), si quelque chose ne va pas, cela renvoie un objet WP Error, quelle est la bonne méthode pour intercepter cette erreur? Soit en utilisant des fonctions WP intégrées, soit des exceptions PHP, etc.

Dunhamzzz
la source
4
Juste pour ajouter et clarifier ce qui est dit dans les réponses ici, ce WP_Errorn'est pas un Exceptionobjet PHP . Vous n'utilisez pas de try/catchméthodes avec. Mais comme indiqué, il existe des fonctions pratiques pour le rendre facile à utiliser.
Dougal Campbell

Réponses:

21
  1. Affectez le retour de la fonction à la variable.

  2. Vérifiez la variable avec is_wp_error().

  3. Si truegérer en conséquence, par exemple trigger_error()avec le message de la WP_Error->get_error_message()méthode.

  4. Si false- procédez comme d'habitude.

Usage:

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
la source
11

Il je,

tout d'abord, vous vérifiez la météo, votre résultat est un WP_Errorobjet ou non:

$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
    }
}

C'est la manière habituelle.

Mais l'objet WP_Error peut être instancié sans qu'aucune erreur ne se produise, juste pour agir comme un magasin d'erreurs générales au cas où. Si vous le souhaitez, vous pouvez vérifier s'il y a des erreurs en utilisant 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 vous faites cela, vous pouvez alors vérifier pour un processus l'erreur renvoyée comme dans l' wp_insert_post()exemple ci-dessus.

La classe est documentée sur le Codex .
Et il y a aussi un petit article ici .

wyrfel
la source
Merci! Votre premier extrait a fait le travail pour wp_insert_user.
Mohammad Mursaleen
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Cela vous montrera exactement ce qui ne va pas avec la fonction d'insertion post wordpress. essayez-le!


la source