
Привожу перевод статьи о настройке страницы ошибки возникающей при отправке комментария без заполнения необходимых полей. Итак, статья.
Если вы отправите комментарий в системе WordPress без заполнения необходимых полей, вы будете переадресованы на пустую неоформленную страницу, которая будет выглядеть похожей на изображение ниже:
Назовем эту страницу «страница ошибки комментария»
WordPress использует файл 404.php для ошибок, таких как «404 Not Found» (не найдено) или «403 Forbidden» (запрещено) внутри вашего оформления (т.е. с учетом темы). Но нет стандартного файла темы для отображения страницы с ошибкой, которая возникает, когда форма комментария была заполнена неправильно. Иными словами, когда возникают 404 и 403 типы ошибок, то все красиво вписывается в дизайн, но стоит вам неправильно заполнить форму комментария в вордпресс, вас ожидает пустая страница с текстом.
К счастью, в версии WordPress 3.0 (и выше) можно осуществлять настройку подобной страницы без особых трудностей. Если вы посмотрите в файл, обрабатывающий отсылку комментария — wp-comments-post.php, вы обнаружите, что когда программа сталкивается с ошибкой, то вызывается функция wp_die(). Зная, что «die» – это «смерть», становится очевидным, почему ее так назвали. Чтобы настроить выходные параметры этой функции вам понадобиться wp_die_handler filter в файле functions.php (Это также файл темы).
Использование хука wp_die_handle с собственно функцией-обработчиком
Чтобы все правильно заработало, выделим три основных шага:
- Установить фильтр обработки «смерти» (добавить wp_die_handler filter в программу).
- Сбросить параметры функции wp_die_handler
- Написать свой собственный код в данной функции
Отлично! Теперь откроем вышеупомянутый functions.php и начнем.
1. Добавляем фильтр wp_die_handler
1 |
add_filter('wp_die_handler', 'get_my_custom_die_handler'); |
2. Сбрасываем прежние параметры
1 2 3 |
function get_my_custom_die_handler() { return 'my_custom_die_handler'; } |
Это действие может показаться вовсе необязательным, но для правильной работы фильтра требуется именно эта промежуточная функция.
3. Создаем свой код
1 2 3 |
function my_custom_die_handler($message,$title='',$args=array()) { //your code } |
там где написано «your code» вставляем свой код
Для начала создания вашего пользовательского фильтра подойдет функция _default_wp_die_handler(), которую вы потом отредактируете. Всего лишь измените HTML и CSS, чтобы все соответствовало дизайну вашего сайта.
А еще лучшим решением будет заново переписать функцию так, чтобы та искала другой файл темы ошибки комментария. Такой подход сделает настройку значительно проще. Изучите образец данного кода ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
function my_custom_die_handler($message, $title='', $args=array()) { $errorTemplate = get_theme_root().'/'.get_template().'/commenterror.php'; if(!is_admin() && file_exists($errorTemplate)) { $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 = "<p>{$errors[0]}</p>"; break; default : $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; break; endswitch; } elseif ( is_string( $message ) ) { $message = "<p>$message</p>"; } if ( isset( $r['back_link'] ) && $r['back_link'] ) { $back_text = $have_gettext? __('« Back') : '« Back'; $message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>"; } if ( empty($title) ) $title = $have_gettext ? __('WordPress › Error') : 'WordPress › Error'; require_once($errorTemplate); die(); } else { _default_wp_die_handler($message, $title, $args); } } |
Теперь в отдельном файле, который мы назвали commenterror.php, вы можете создать свою собственную страницу ошибки комментария. Вот типичная версия такого файла:
commenterror.php
1 2 3 4 5 6 7 8 |
<html> <head> <title><?php echo $title; ?></title> </head> <body> <?php echo $message; ?> </body> </html> |
Не забывайте, мы демонстрируем только самые основные и распространенные примеры. Вы можете вставлять свои шаблонные теги, использованные в других файлах вашей темы. Также наш материал может пригодиться для создания нового шаблона «ошибки» после 404.php. Желаем удачи!
Вот собственно и все, о результатах отписываемся в комментариях.
Каким образом можно сменить url в адресной строке. На данный момент показывает /wp-comments-post.php ?
Смена, например, на /comment-error/
Ответить