Come gestire/catturare un oggetto WP Error in WordPress

4 mar 2011, 15:58:48
Visualizzazioni: 40.5K
Voti: 21

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

1
Commenti

Per aggiungere e chiarire quanto detto nelle risposte qui presenti, WP_Error non è un oggetto Exception di PHP. Non si utilizzano i metodi try/catch con esso. Ma come notato, ci sono funzioni di convenienza che ne facilitano l'uso.

Dougal Campbell Dougal Campbell
4 mar 2011 22:17:56
Tutte le risposte alla domanda 3
0
33
  1. Assegna il risultato della funzione alla variabile.

  2. Verifica la variabile con is_wp_error().

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

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

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.

4 mar 2011 16:13:19
Commenti

Grazie! Il tuo primo snippet ha funzionato per 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>';

Questo ti mostrerà esattamente cosa non va nella funzione di inserimento post di WordPress. Provalo e vedrai!

20 apr 2011 00:02:20