Статьи

Обработка ошибок WordPress с помощью WP_Error Class I

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

Ошибки, вызванные конечными пользователями, обычно более неблагоприятны, чем ошибки программиста, поскольку введенные пользователем данные или информация непредсказуемы.

Например, в поле формы электронной почты вместо ввода действительного адреса электронной почты пользователь может ввести текст не по электронной почте. Если на веб-сайте отсутствует надежный механизм обработки ошибок, пользователь может получить несанкционированный доступ к конфиденциальной информации.

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

WordPress поставляется с классом WP_Error, который делает обработку ошибок внутри плагинов и самого WordPress намного проще.

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

Ниже приведены два свойства класса и что они делают.

  • $errors is   массив, содержащий список ошибок.
  • $error_data — это массив, содержащий список данных для кодов ошибок.

Прежде чем мы рассмотрим методы класса, я хотел бы объяснить эти три термина, которые используются внутри класса WP_Error код, сообщение, данные.

Не беспокойтесь, если их трудно понять прямо сейчас, — мы проясним ситуацию, когда рассмотрим примеры кода в следующем разделе.

  • Код похож на данные пары ключ / значение, такие как массив: код в этом смысле является ключом.
  • Сообщение — это значение пары ключ / значение, сохраненное в свойстве класса errors .
  • Данные , как и сообщение выше, являются значением ключа ( code ), но сохраняются в свойстве error_data .

Теперь о методах класса и о том, что они делают:

  • __construct() — это магический метод PHP, принимающий три аргумента — код, сообщение и данные. Передача аргумента при создании WP_Error класса WP_Error устанавливает сообщение об ошибке.
  • get_error_codes() возвращает список массивов всех кодов ошибок, если они доступны.
  • get_error_code() извлекает первый код ошибки и возвращает строку, целое или пустое значение, если кодов ошибок нет.
  • get_error_messages( $code ) извлекает все сообщения об ошибках, когда аргумент code отсутствует или сообщения об ошибках, соответствующие аргументу code . Возвращает массив строк ошибок при успехе или пустой массив при ошибке (если используется параметр кода).
  • get_error_message( $code ) получает одно сообщение об ошибке. Это получит первое доступное сообщение для кода. Если код не указан, будет использован первый доступный код. Возвращает строку ошибки.
  • get_error_data( $code ) извлекает данные об ошибках для данного кода ошибки. Возвращает данные или ноль, если ошибок нет.
  • add( $code, $message, $data ) добавить больше сообщений об ошибках в список сообщений об ошибках.
  • add_data( $data, $code ) добавляет данные для кода ошибки. Код ошибки может содержать только один фрагмент данных об ошибках.

Чтобы использовать класс WP_Error для обработки ошибок, сначала WP_Error экземпляр класса, а затем используйте метод класса. Вы можете добавить сообщение об ошибке, передав code , message и data на экземпляр.

1
$my_error = new WP_Error( ‘toy’, ‘my favorite toy is dolly’ );

Изучение структуры объекта $ my_error с помощью print_r() показывает:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
WP_Error Object
(
    [errors] => Array
        (
            [toy] => Array
                (
                    [0] => my favorite toy is dolly
                )
 
        )
 
    [error_data] => Array
        (
        )

Обратите внимание, что наша определенная ошибка хранится в свойстве error_data свойство error_data не имеет данных.

Передав третий аргумент при создании экземпляра, создайте данные с code (первый аргумент), являющимся ключом массива, и третьим аргументом ( data ), значением массива.

1
2
3
<?php
$my_error = new WP_Error( ‘toy’, ‘my favorite toy is dolly’, ‘my best’ );
print_r( $my_error );

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
WP_Error Object
(
    [errors] => Array
        (
            [toy] => Array
                (
                    [0] => my favorite toy is dolly
                )
 
        )
 
    [error_data] => Array
        (
            [toy] => my best
        )
 
)

Чтобы добавить или добавить больше сообщений об ошибках в список ошибок, используется метод add который принимает code , message и data качестве аргумента метода.

1
2
3
<?php
$my_error = new WP_Error( ‘toy’, ‘my favorite toy is dolly’, ‘best toy’ );
$my_error->add( ‘game’, ‘my favorite game console is PS4’ );

Передача третьего аргумента (смешанный тип данных) в метод add() добавляет данные в код ошибки.

1
2
<?php
$my_error->add( ‘game’, ‘my favorite game console is PS4’, ‘best game’ );

Снова используя print_r() , давайте рассмотрим структуру и информацию нашего объекта $my_error WP_Error .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
WP_Error Object
(
    [errors] => Array
        (
            [toy] => Array
                (
                    [0] => my favorite toy is dolly
                )
 
            [game] => Array
                (
                    [0] => my favorite game console is PS4
                )
 
        )
 
    [error_data] => Array
        (
            [toy] => best toy
            [game] => best game
        )
 
)

Метод add_data() также можно использовать для добавления строго данных для кода ошибки. Код ошибки может содержать только одну информацию об ошибке.

1
$my_error->add_data( ‘my best teacher is Uncle Sam’, ‘teacher’ );

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

Использование get_error_codes() возвращает список массивов всех кодов ошибок.

1
2
3
4
5
6
7
8
print_r( $my_error->get_error_codes() );
/* returns
 Array
 (
 [0] => toy
 [1] => game
 )
 */

Пока get_error_code() возвращает только первый код ошибки.

1
print_r( $my_error->get_error_code() );

get_error_messages() Получите все сообщения об ошибках, когда аргумент code отсутствует или сообщения об ошибках, соответствующие аргументу code .

1
2
3
4
5
6
7
8
print_r( $my_error->get_error_messages() );
/* returns
 Array
 (
 [0] => my favorite toy is dolly
 [1] => my favorite game console is PS4
 )
 */

1
2
3
4
5
6
7
8
9
print_r( $my_error->get_error_messages( ‘game’ ) );
/* returns
 
 Array
(
    [0] => my favorite game console is PS4
)
 
*/

get_error_message() возвращает одно сообщение об ошибке, соответствующее коду. если нет кода, возвращает первое сообщение об ошибке.

1
2
print_r( $my_error->get_error_message() );
// my favorite toy is dolly

get_error_data() возвращает данные для кода ошибки.

1
2
print_r( $my_error->get_error_data() );
// best toy

1
2
print_r( $my_error->get_error_data( ‘teacher’ ) );
// my best teacher is Uncle Sam

При создании плагина вы можете проверить, является ли переменная объектом WP_Error . Вот где is_wp_error() пригодится.

Кроме того, вы также можете убедиться, что объект WP_Error не содержит никаких сообщений об ошибках перед обработкой действия. Например, фрагмент кода ниже проверяет, не содержит ли объект $my_error ошибки. Если истина, « Нет ошибок, мы в порядке », повторяется.

1
2
3
if ( 1 > count( $my_error->get_error_messages() ) ) {
    echo «No error, we’re good to go»;
}

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

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