Come catturare / cosa fare con un oggetto errore WP


15

Sto eseguendo alcune delle funzioni WP direttamente all'interno di un plugin, incluso wp_insert_post (), se qualcosa va storto, questo restituisce un oggetto WP Error, qual è il metodo corretto per rilevare questo errore? O usando le funzioni WP integrate o le eccezioni PHP o quant'altro ..


4
Solo aggiungere e chiarire ciò che viene detto nelle risposte qui, nonWP_Error è un oggetto PHP . Non usi metodi con esso. Ma come notato, ci sono funzioni utili per renderlo facile da usare. Exceptiontry/catch
Dougal Campbell

Risposte:


21
  1. Assegna il ritorno della funzione alla variabile.

  2. Controlla la variabile con is_wp_error().

  3. Se truegestito di conseguenza, ad esempio trigger_error()con il messaggio dal WP_Error->get_error_message()metodo.

  4. Se false- procedere come al solito.

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

11

Lui io,

per prima cosa controlli il tempo il tuo risultato è un WP_Erroroggetto 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
    }
}

Questo è il solito modo.

Ma l'oggetto WP_Error può essere istanziato senza che si verifichino errori, solo per agire come un archivio di errori generale per ogni evenienza. Se vuoi farlo, puoi verificare se ci sono errori usando 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
}

In tal caso, è possibile verificare la presenza di un errore di processo restituito, come wp_insert_post()nell'esempio sopra.

La classe è documentata sul Codice .
E c'è anche un piccolo articolo qui .


Grazie! Il tuo primo frammento ha funzionato per wp_insert_user.
Mohammad Mursaleen,

1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Questo ti mostrerà esattamente cosa non va nella funzione post insert di wordpress. provalo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.