Функция WP_DIE() в WordPress: как использовать для управления ошибками

WP_DIE() │ WP 2.0.4

Функция WP_DIE() завершает выполнение WordPress и отображает указанное HTML-сообщение.

Эта функция является дополнением к встроенной функции PHP die(). Главное отличие в том, что пользователю будет показано HTML-сообщение. Рекомендуется использовать эту функцию только в тех случаях, когда выполнение скрипта должно быть прекращено. Часто вызывать эту функцию не стоит — постарайтесь обрабатывать ошибки более плавно и без лишнего шума.

Использование

В качестве сокращения можно передать нужный код ответа HTTP как число в параметр $title (будет применено заглавное сообщение по умолчанию) или в параметр $args.

Применение функции

wp_die( $message, $title, $args );

Параметры:

  • $message (string | WP_Error) — Сообщение об ошибке. Если это объект типа WP_Error и не запрос Ajax или XML-RPC, будут использованы сообщения об ошибках.
  • $title (string | int) — Заголовок ошибки. Если $message — это объект WP_Error, данные ошибки с ключом title могут быть использованы для задания заголовка. Если $title — это число, то оно интерпретируется как код ответа.
  • $args (string | array | int) — Аргументы для управления поведением. Если $args — это число, то оно интерпр��тируется как код ответа.

По умолчанию:

  • $message: пустая строка
  • $title: пустая строка
  • $args: пустой массив

Примеры параметров $args:

  • response (int) — Код ответа HTTP. По умолчанию: 200 для запросов Ajax, 500 для всех остальных.
  • link_url (string) — URL для включения ссылки. Работает только в сочетании с параметром link_text.
  • link_text (string) — Текст для ссылки. Работает только в сочетании с параметром link_url.
  • back_link (true | false) — Нужно ли включать ссылку для возврата назад.
  • text_direction (string) — Направление текста. Используется только внутренне, когда WordPress всё ещё загружается, и локализация сайта ещё не настроена. Принимает 'rtl' и 'ltr'.
  • charset (string) — Кодировка для HTML-вывода. По умолчанию: 'utf-8'.
  • code (string) — Код ошибки для использования. По умолчанию: 'wp_die' или основной код ошибки, если $message — это WP_Error.
  • exit (true | false) — Нужно ли завершать процесс после завершения выполнения. По умолчанию: true.

Примеры использования

1. Показать значение $post

add_filter( 'body_class', 'add_body_class_cb' );
function add_body_class_cb( $classes ) {
    global $post;

    wp_die( '
' . var_export( $post, true ) . '

' );
}

2. Изменение стиля блока wp_die

Чтобы изменить дизайн блока wp_die, используйте хук wp_die_handler.

add_filter( 'wp_die_handler', function(){
    return 'my_wp_die_handler';
});

function my_wp_die_handler( $message, $title = '', $args = array() ){
    $defaults = array( 'response' => 500 );
    $r = wp_parse_args($args, $defaults);

    $have_gettext = function_exists('__');

    if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
        if ( empty( $title ) ) {
            $error_data = $message->get_error_data();
            if ( is_array( $error_data ) && isset( $error_data['title'] ) )
                $title = $error_data['title'];
        }
        $errors = $message->get_error_messages();
        switch ( count( $errors ) ) {
            case 0 :
                $message = '';
                break;
            case 1 :
                $message = "

{$errors[0]}

"; break; default : $message = "
  • " . join( "
  • ", $errors ) . "
"; break; } } elseif ( is_string( $message ) ) { $message = "

$message

"; } if ( isset( $r['back_link'] ) && $r['back_link'] ) { $back_text = $have_gettext? __('« Назад') : '« Назад'; $message .= "

$back_text

"; } if ( ! did_action( 'admin_head' ) ) { if ( !headers_sent() ) { status_header( $r['response'] ); nocache_headers(); header( 'Content-Type: text/html; charset=utf-8' ); } if ( empty($title) ) $title = $have_gettext ? __('WordPress › Ошибка') : 'WordPress › Ошибка'; $text_direction = 'ltr'; if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] ) $text_direction = 'rtl'; elseif ( function_exists( 'is_rtl' ) && is_rtl() ) $text_direction = 'rtl'; ?> > <?php echo $title ?>

Примечания

  • Глобальная переменная. WP_Query. $wp_query — это объект запроса WordPress.

Изменения

  • С версии 2.0.4: Функция была введена.
  • С версии 4.1.0: Параметры $title и $args были изменены, теперь они могут принимать целое число как код ответа.
  • С версии 5.1.0: Добавлены параметры $link_url, $link_text, и $exit.
  • С версии 5.3.0: Добавлен параметр $charset.
  • С версии 5.5.0: Параметр $text_direction имеет приоритет над get_language_attributes() в стандартном обработчике.

Теперь вы знаете, как использовать функцию wp_die() в WordPress для обработки ошибок и завершения выполнения приложения! Если у вас есть вопросы, не стесняйтесь их задавать.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *