Come gestire/catturare un oggetto WP Error in WordPress
Sto eseguendo alcune funzioni WordPress 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 catturare questo errore? Sia utilizzando le funzioni integrate di WordPress, le eccezioni PHP o qualsiasi altro metodo...
Assegna il risultato della funzione alla variabile.
Verifica la variabile con
is_wp_error()
.Se
true
gestisci di conseguenza, ad esempio contrigger_error()
e il messaggio ottenuto dal metodoWP_Error->get_error_message()
.Se
false
- procedi normalmente.
Utilizzo:
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();
}

Ciao,
per prima cosa, verifica se il tuo risultato è un oggetto WP_Error
oppure no:
$id = wp_insert_post(...);
if (is_wp_error($id)) {
$errors = $id->get_error_messages();
foreach ($errors as $error) {
echo $error; //questo è solo un esempio e generalmente non è una buona idea, dovresti implementare dei metodi per elaborare gli errori più avanti e utilizzare gli hook di errore/messaggio di WP per visualizzarli
}
}
Questo è il metodo solitamente utilizzato.
Ma l'oggetto WP_Error può essere istanziato senza che si verifichi alcun errore, semplicemente per fungere da contenitore generale di errori nel caso. Se vuoi farlo, puoi verificare la presenza di errori usando get_error_code()
:
function my_func() {
$errors = new WP_Error();
... //eseguiamo alcune operazioni
if (....) $errors->add('1', 'Il mio errore personalizzato'); //in base a una condizione memorizziamo un errore
.... //eseguiamo altre operazioni
if (...) $errors->add('5', 'Il mio altro errore personalizzato'); //in base a una condizione memorizziamo un altro errore
.... //e continuiamo con altre operazioni
if ($errors->get_error_code()) return $errors; //il codice seguente è cruciale, quindi prima di procedere dobbiamo verificare se ci sono stati errori...se sì, restituiamo l'oggetto errore
.... // eseguiamo operazioni vitali
return $my_func_result; // restituiamo il risultato reale
}
Se fai così, puoi poi verificare ed elaborare l'errore restituito esattamente come nell'esempio con wp_insert_post()
visto sopra.
La Classe è documentata sul Codex.
E c'è anche un piccolo articolo qui.
