Como capturar / o que fazer com um objeto de erro do WP

15

Estou executando algumas das funções do WP diretamente dentro de um plug-in, incluindo wp_insert_post (), se algo der errado, isso retornará um objeto Erro do WP, qual é o método correto para detectar esse erro? Ou usando funções internas do WP ou exceções do PHP ou outros enfeites.

Dunhamzzz
fonte
4
Apenas para adicionar e esclarecer o que é dito nas respostas aqui, nãoWP_Error é um objeto PHP . Você não usa métodos com ele. Porém, como observado, existem funções de conveniência para facilitar o uso. Exceptiontry/catch
Dougal Campbell

Respostas:

21
  1. Atribua retorno da função à variável.

  2. Verifique a variável com is_wp_error().

  3. Se truemanipular adequadamente, por exemplo, trigger_error()com mensagem do WP_Error->get_error_message()método

  4. Se false- continue como de costume.

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

Ele eu,

primeiro, verifique se o clima é um WP_Errorobjeto ou não:

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

Esta é a maneira usual.

Mas o objeto WP_Error pode ser instanciado sem que ocorra qualquer erro, apenas para atuar como um armazenamento de erro geral, apenas por precaução. Se você quiser fazer isso, poderá verificar se há algum erro 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
}

Se você fizer isso, poderá verificar por um processo o erro retornado, como no wp_insert_post()exemplo acima.

A classe está documentada no Codex .
E há também um pequeno artigo aqui .

Wyrfel
fonte
Obrigado! Seu primeiro trecho fez o trabalho para wp_insert_user.
Mohammad Mursaleen
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Isso mostrará exatamente o que há de errado com a função de inserção de post do wordpress. apenas tente !


fonte