Статьи

Введение в класс WP_Error

В любом процессе разработки ошибки — это то, чего вы не можете избежать, независимо от того, насколько компетентны и тщательны вы при написании кода.

Как разработчик WordPress, ваша задача — убедиться, что любые ошибки в вашем коде обрабатываются правильно, не затрагивая конечного пользователя. WordPress поставляется с базовым классом обработки ошибок, а именно WP_Error который можно использовать и интегрировать в ваш код для базовой обработки ошибок.

В этом уроке мы рассмотрим базовую анатомию класса WP_Error , то, как он работает, и самое главное, мы рассмотрим, как интегрировать класс WP_Error в наше приложение.

WordPress WP_Error Class

Что внутри

Структура класса WP_Error самом деле очень проста и достаточно мощна, чтобы использовать ее в качестве механизма обработки ошибок для вашего плагина.

Весь исходный код для класса WP_Error можно найти в файле wp-includes/class-wp-error.php . Давайте посмотрим на его свойства и доступные методы.

свойства

WP_Error имеет только два закрытых свойства, а именно: $errors и $error_data . $errors используется для хранения связанных сообщений об ошибках, а $error_data может использоваться для хранения связанных данных, к которым вы хотите обращаться позже. WP_Error использует простую пару ключ-значение для хранения связанных ошибок и данных в объекте, поэтому ключ, определенный в WP_Error должен быть уникальным, чтобы избежать перезаписи ранее определенного ключа.

методы

WP_Error поставляется с различными методами, которые в конечном итоге изменяют два свойства, которые он содержит. Давайте посмотрим на некоторые из них.

  • get_error_codes — возвращает все доступные коды ошибок для этого конкретного экземпляра WP_Error . Если вам нужен только первый код ошибки, есть еще одна отдельная функция с именем get_error_code .

  • get_error_messages( $code ) — если $code не указан, функция просто вернет все сохраненные сообщения в этом конкретном экземпляре WP_Error . Опять же, если вам нужно только вернуть сообщение для определенного кода ошибки, просто используйте get_error_message( $code ) .

  • add( $code, $message, $data ) — эта функция особенно полезна, когда вы хотите изменить ошибки, хранящиеся в экземплярах. WP_Error объект. Обратите внимание, что даже $message и $data не являются обязательными, переменная $errors будет заполнена.

  • add_data( $data, $code) — если вы собираетесь изменять $error_data свойство $error_data , эту функцию можно использовать. Обратите внимание, что аргумент $code идет вторым, в отличие от того, что мы имеем в методе add . Если $code не указан, данные об ошибке будут добавлены к первому коду ошибки.

  • remove( $code ) — это довольно новый метод, недавно добавленный в WordPress 4.1, который удаляет все связанные сообщения об ошибках и данные из определенного ключа.

функция

Как узнать, является ли конкретная переменная или данные, возвращаемые функцией, экземпляром WP_Error ? Ну, есть служебная функция, которую вы можете просто проверить, которая называется is_wp_error которая возвращает true или false в зависимости от заданной переменной.

  • is_wp_error( $thing ) — возвращает true, если $thing является экземпляром WP_Error в WP_Error случае — false.

Реализуй свой

Недостаточно просто знать, как WP_Error внутренняя WP_Error , вам также необходимо научиться правильно ее реализовывать в своем приложении. Давайте рассмотрим несколько примеров, чтобы лучше понять, как это работает.

Обработка ошибок, возвращаемых базовой функцией WordPress

WordPress предлагает множество полезных функций, которые можно использовать для ускорения нашего процесса разработки. Большинство функций также хорошо оснащены базовыми возможностями обработки ошибок, которые мы можем использовать.

Например, wp_remote_post — очень полезная функция, которую мы можем использовать, чтобы сделать удаленный запрос POST к определенному URL. Однако мы не можем ожидать, что удаленный URL всегда доступен или наш запрос всегда успешен. Что мы знаем из страницы кодекса, так это то, что эта функция будет возвращать WP_Error в случае ошибки. Эти знания помогут нам правильно реализовать обработку ошибок в нашем приложении.

Посмотрите на этот фрагмент.

 // Make a responseo to remote url $url $response = wp_remote_post( $url, array( 'timeout' => 30, 'body' => array( 'foo' => 'bar' ) ) ); if ( is_wp_error( $response ) ) { echo 'ERROR: ' . $response->get_error_message(); } else { // do something } 

Как видите, мы выполняем удаленный POST-запрос к $url . Однако мы не просто принимаем данные $response как есть, но вместо этого мы делаем небольшую проверку с помощью удобной функции is_wp_error которую мы рассмотрели ранее. Если все хорошо, то только мы можем продолжить то, что мы хотим сделать с нашим $response .

Возврат пользовательской ошибки в вашем собственном приложении

Допустим, у вас есть пользовательская функция, которая обрабатывает handle_form_submission контактной формы с именем handle_form_submission . Предполагая, что у нас где-то есть настраиваемая форма, давайте посмотрим, как мы можем улучшить функцию, реализовав нашу собственную функцию обработки ошибок.

 function handle_form_submission() { // do your validation, nonce and stuffs here // Instantiate the WP_Error object $error = new WP_Error(); // Make sure user supplies the first name if ( empty( $_POST['first_name'] ) ) { $error->add( 'empty', 'First name is required' ); } // And last name too if ( empty( $_POST['last_name'] ) ) { $error->add( 'empty', 'Last name is required' ); } // Check for email address if ( empty( $_POST['email'] ) ) { $error->add( 'empty', 'Last name is required' ); } elseif ( ! is_email( $_POST['email'] ) ) { $error->add( 'invalid', 'Email address must be valid' ); } // Lastly, check for the message if ( empty( $_POST['message'] ) ) { $error->add( 'empty', 'Your message is required' ); } // Send the result if ( empty( $error->get_error_codes() ) ) { return $error; } // Everything is fine return true; } 

Конечно, вам нужно будет реализовать собственную очистку и проверку в этих функциях, но это выходит за рамки данного руководства. Теперь, зная, что мы правильно возвращаем экземпляр WP_Error при ошибке, мы можем использовать его для предоставления более значимого сообщения об ошибке конечному пользователю.

Предполагая, что у вас есть конкретная часть в приложении для отображения ошибки отправки формы, вы можете сделать это:

 $result = handle_form_submission(); if ( is_wp_error( $result ) ) { echo '<p>Ops, something went wrong. Please rectify this errors</p>'; echo '<ul>'; echo '<li>' . implode( '</li><li>', $result->get_error_messages() ) . '</li>'; echo '</ul>'; } else { // Everything went well } 

Внешние ссылки

Вывод

Совершенствование своего мастерства в разработке программного обеспечения также означает знание того, что делать, когда ваш код не может сделать то, что он должен делать, и уверенность в том, что ваше приложение может справиться с этим элегантно.

Что касается WordPress, использование поставляемого с ним класса WP_Error обеспечивает довольно простую, но мощную реализацию обработки ошибок, которую вы можете интегрировать в свое приложение.

о чем ты думаешь? Как вы используете WP_Error в своем ежедневном процессе разработки? Пожалуйста, поделитесь этим с нами ниже.