Прекращает выполнения любого PHP-кода в WordPress и отображает сообщение об ошибке в виде стилизованной HTML-страницы, скриншоты в примерах.
Является в некотором роде расширенным вариантом PHP-функций die()
и exit()
.
Может использоваться и внутри AJAX-запросов. В этом случае функция не генерирует HTML-страницу с ошибкой, а лишь выводит сообщение и прекращает выполнение кода.
wp_die( $message = '', $title = '', $args = array() )
<div class="wp-die-message"></div>
.<title>
).$title
не был передан заголовок в виде строки, то в качестве заголовка будет использоваться дополнительный параметр объекта ошибки title
, если он в ней конечно указан. Подробнее во втором примере.WordPress › Ошибка
.$defaults = array( 'response' => 500, 'code' => 'wp_die', 'exit' => true, 'back_link' => false, 'link_url' => '', 'link_text' => '', 'text_direction' => '', 'charset' => 'utf-8', 'additional_errors' => array(), );
500
, но можете использовать другие.wp_die
, либо тот, который был получен из объекта WP_Error. Используется только в запросах к REST API.die()
. То есть вы можете это отключить, установив значение параметра в false
.« Back
, который будет автоматически переведён на язык вашего сайта по возможности. Бывает удобно при работе с валидацией форм, подробнее в примере 3.rtl
для смены направления текста справа налево.array( array( 'message' => 'Ошибка 2' ) )
.Начнём со всего одной строчки кода:
wp_die( 'Это ошибка, ребят' );
В итоге:
Вообще про класс WP_Error есть отдельный супер-урок.
// создаём объект ошибки, он пустой пока что $err = new WP_Error(); // добавим в него ошибку $err->add( 'true_error', // код ошибки, особо не пригодится 'Какой-то текст и <strong>HTML-теги</strong> в сообщении об ошибке', // сам текст array( 'title' => 'Хелоу, ит ис эррор' // а это будет в <title></title> ) ); wp_die( $err, '', array( 'link_text' => 'Скорее напишите мне', 'link_url' => site_url( 'contact' ) ) );
Уже упоминал, что непосредственно в тексте ошибки можно использовать HTML-теги. Однако до версии WordPress 5.3 этот текст оборачивался в тег параграфа <p>
, что делало использование внутри текста некоторых тегов, например <h1>
, <p>
(и всё, что не может находиться внутри абзаца) разметку невалидной. Однако это исправили в версии 5.3, и теперь текст ошибки оборачивается в тег <div>
с классом .wp-die-message
.
Также решил добавить произвольную ссылку параметрами link_url
и link_text
.
В целом, если вы не заполните форму комментариев прямо у меня на сайте и нажмёте кнопку «Отправить», то у вас появится вот такое сообщение об ошибке:
У него по умолчанию уже есть ссылка «Назад» кстати.
Давайте попробуем сделать что-то в этом роде. Я буду использовать код на одной и той же странице, можете протестировать его например в кастом пейдж темплейт, я для теста и вовсе вставил его в самое начало файла header.php
.
// начинаем мы именно с валидации if( isset( $_POST[ 'action' ] ) && 'formsubmit' == $_POST[ 'action' ] ) { if( empty( $_POST[ 'email' ] ) || ! is_email( $_POST[ 'email' ] ) ) { wp_die( 'Укажите правильный email!', '', array( 'back_link' => true ) ); } } echo '<form action="" method="POST"> <input type="text" name="email" placeholder="Ваш email" /> <input type="hidden" name="action" value="formsubmit" /> <button>Отправить</button> </form>';
Специально решил использовать <input type="text">
вместо <input type="email">
, чтобы HTML-валидация нам не мешала.
Однако в реальности бывает редко, что сообщения об ошибках выводятся сразу же в файле-обработчике формы. Чаще всё-таки происходит редирект с $_GET-параметрами. Пошагово разбираем этот процесс в этом уроке.
Также функция wp_die()
может пригодиться, когда нам нужно узнать, что происходит в какой-либо определённой переменной и сразу же выйти из остального кода.
А теперь попробуем например выяснить, что находится в переменной $wp_query
хитрым и довольно удобным на мой взгляд способом:
global $wp_query; wp_die( '<pre>' . var_export( $wp_query, true ) );
Конечно, это нужно использовать строго на тестовом сайте, хотя код можно немного усовершенствовать:
if( ! empty( $_GET[ 'true_test' ] ) && 'ok' == $_GET[ 'true_test' ] ) { global $wp_query; wp_die( '<pre>' . var_export( $wp_query, true ) ); }
В таком случае код в условии выполнится, только если в конце URL страницы мы добавим ?true_test=ok
.
Функция, а точнее фильт-хук внутри неё wp_die_handler
позволяет полностью изменить дизайн и HTML страницы с ошибкой. В целом я бы рекомендовал оставить эту страницу в покое и делать редиректы на обычные страницы сайта с $_GET-параметрами (подробнее), но если вам это прям ну очень нужно, то вот примерный код:
add_filter( 'wp_die_handler', function() { return 'true_custom_error_html_page'; // название новой функции генерации HTML ошибки } ); function true_custom_error_html_page( $message, $title, $args ) { // а тут открываем просторы для ваших идей }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Приветствую!
А есть подобная функция только без редиректа?
Привет!
Просто
die()
:) илиexit
Здравствуйте, а куда вставить global $wp_query; ..... , чтобы вывелся результат?
Здравствуйте. По сути куда угодно.