Wie fange ich ein WP-Fehlerobjekt?

15

Ich führe einige der WP-Funktionen direkt in einem Plugin aus, einschließlich wp_insert_post (). Wenn etwas schief geht, wird ein WP-Fehlerobjekt zurückgegeben. Was ist die richtige Methode, um diesen Fehler abzufangen? Entweder mit integrierten WP-Funktionen oder PHP-Ausnahmen oder so weiter.

Dunhamzzz
quelle
4
Nur um zu ergänzen und zu verdeutlichen, was in den Antworten hier gesagt wird, WP_Errorhandelt es sich nicht um ein PHP- ExceptionObjekt. Sie verwenden keine try/catchMethoden damit. Wie bereits erwähnt, gibt es jedoch praktische Funktionen, die die Bedienung vereinfachen.
Dougal Campbell

Antworten:

21
  1. Weisen Sie der Variablen die Rückgabe der Funktion zu.

  2. Überprüfen Sie die Variable mit is_wp_error().

  3. Wird trueentsprechend behandelt, zum Beispiel trigger_error()mit message from WP_Error->get_error_message()method.

  4. Wenn false- wie gewohnt fortfahren.

Verwendung:

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
quelle
11

Hei,

Zuerst überprüfen Sie, ob Ihr Ergebnis ein WP_ErrorObjekt ist oder nicht:

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

Dies ist der übliche Weg.

Das WP_Error-Objekt kann jedoch ohne Auftreten eines Fehlers instanziiert werden, um nur für alle Fälle als allgemeiner Fehlerspeicher zu fungieren. Wenn Sie dies möchten, können Sie überprüfen, ob Fehler vorliegen, indem Sie Folgendes verwenden 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 diesem Fall können Sie den zurückgegebenen Fehler wie im wp_insert_post()obigen Beispiel auf einen Prozess überprüfen .

Die Klasse ist im Kodex dokumentiert .
Und hier gibt es auch einen kleinen Artikel .

Wyrfel
quelle
Vielen Dank! Ihr erstes Snippet hat die Arbeit für wp_insert_user erledigt.
Mohammad Mursaleen
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Dies zeigt Ihnen genau, was mit der WordPress-Post-Insert-Funktion nicht stimmt. Probier es einfach !


quelle