WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

wp_die()WP 2.0.4

Останавливает выполнение PHP скрипта и выводит отформатированное HTML сообщение.

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

С версии 5.3 сообщение обрамляется тегом <div class="wp-die-message">, а не <p>. Таким образом, в него можно вкладывать другие блочные элементы (например <h1>) и есть удобная возможность стилизовать блок через CSS.

Возвращает

null. Ничего не возвращает, а обрывает работу PHP.

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

wp_die( $message, $title, $args );
$message(смешанный)
Сообщение об ошибке или полный объект класса WP_Error.
По умолчанию: ''
$title(строка/массив/число/объект/логический)
Заголовок ошибки. Если используете объект WP_Error, то заголовок будет взят из $data['title'], этот параметр можно заранее изменить под себя.
По умолчанию: ''
$args(строка/массив)

Различные аргументы контролирующие поведение. См. _wp_die_process_input().

$defaults = array(
	'response'          => 0,
	'code'              => '',
	'exit'              => true,
	'back_link'         => false,
	'link_url'          => '',
	'link_text'         => '',
	'text_direction'    => '',
	'charset'           => 'utf-8',
	'additional_errors' => array(),
);
  • response(число)
    Код состояния HTTP. 500 - внутренняя ошибка сервера. Весь список смотрите тут.
    По умолчанию: 500

  • back_link(логический)
    Выводить или нет обратную ссылку на предыдущую страницу.
    По умолчанию: false

  • text_direction(строка)
    Направление текста: ltr (слева направо) или rtl (справа налево).
    По умолчанию: 'ltr'

  • link_url(строка) (WP 5.1)
    URL ссылки, которая будет добавлена в сообщение (message). Используется вместе с link_text.
    По умолчанию: ''

  • link_text(строка) (WP 5.1)
    Текст (анкор) ссылки, которая будет добавлена в сообщение (message). Используется вместе с link_url.
    По умолчанию: ''

  • exit(true/false) (WP 5.1)
    Нужно ли прерывать работу с помощью die().
    По умолчанию:

  • charset(строка) (WP 5.3)
    Кодировка.
    По умолчанию: 'utf-8'

По умолчанию: array()

Примеры

1

#1 Стилизация wp_die блока

Если на сайте нужно изменить дизайн этого блока, то можно воспользоваться хуком wp_die_handler:

<?php

## Заменим название функции обработчика блока wp_die
add_filter( 'wp_die_handler', function(){
	return 'my_wp_die_handler';
});

## Функция обработчика блока wp_die. 
## На основе функции https://wp-kama.ru/function/_default_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 = "<p>{$errors[0]}</p>";
			break;
		default :
			$message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
			break;
		}
	} 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 ( ! 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 › Error') : 'WordPress › Error';

		$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';
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) language_attributes(); else echo "dir='$text_direction'"; ?>>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="width=device-width">
	<?php
	if ( function_exists( 'wp_no_robots' ) ) {
		wp_no_robots();
	}
	?>
	<title><?php echo $title ?></title>
	<style type="text/css">
		html {
			background: #f1f1f1;
		}
		body {
			background: #fff;
			color: #444;
			font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
			margin: 2em auto;
			padding: 1em 2em;
			max-width: 700px;
			-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
			box-shadow: 0 1px 3px rgba(0,0,0,0.13);
		}
		h1 {
			border-bottom: 1px solid #dadada;
			clear: both;
			color: #666;
			font-size: 24px;
			margin: 30px 0 0 0;
			padding: 0;
			padding-bottom: 7px;
		}
		#error-page {
			margin-top: 50px;
		}
		#error-page p {
			font-size: 14px;
			line-height: 1.5;
			margin: 25px 0 20px;
		}
		#error-page code {
			font-family: Consolas, Monaco, monospace;
		}
		ul li {
			margin-bottom: 10px;
			font-size: 14px ;
		}
		a {
			color: #0073aa;
		}
		a:hover,
		a:active {
			color: #00a0d2;
		}
		a:focus {
			color: #124964;
			-webkit-box-shadow:
				0 0 0 1px #5b9dd9,
				0 0 2px 1px rgba(30, 140, 190, .8);
			box-shadow:
				0 0 0 1px #5b9dd9,
				0 0 2px 1px rgba(30, 140, 190, .8);
			outline: none;
		}
		.button {
			background: #f7f7f7;
			border: 1px solid #ccc;
			color: #555;
			display: inline-block;
			text-decoration: none;
			font-size: 13px;
			line-height: 26px;
			height: 28px;
			margin: 0;
			padding: 0 10px 1px;
			cursor: pointer;
			-webkit-border-radius: 3px;
			-webkit-appearance: none;
			border-radius: 3px;
			white-space: nowrap;
			-webkit-box-sizing: border-box;
			-moz-box-sizing:    border-box;
			box-sizing:         border-box;

			-webkit-box-shadow: 0 1px 0 #ccc;
			box-shadow: 0 1px 0 #ccc;
			vertical-align: top;
		}

		.button.button-large {
			height: 30px;
			line-height: 28px;
			padding: 0 12px 2px;
		}

		.button:hover,
		.button:focus {
			background: #fafafa;
			border-color: #999;
			color: #23282d;
		}

		.button:focus  {
			border-color: #5b9dd9;
			-webkit-box-shadow: 0 0 3px rgba( 0, 115, 170, .8 );
			box-shadow: 0 0 3px rgba( 0, 115, 170, .8 );
			outline: none;
		}

		.button:active {
			background: #eee;
			border-color: #999;
			-webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
			box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
			-webkit-transform: translateY(1px);
			-ms-transform: translateY(1px);
			transform: translateY(1px);
		}

		<?php
		if ( 'rtl' == $text_direction ) {
			echo 'body { font-family: Tahoma, Arial; }';
		}
		?>
	</style>
</head>
<body id="error-page">
<?php endif; // ! did_action( 'admin_head' ) ?>
	<?php echo $message; ?>
</body>
</html>
<?php
	die();
}
0

#2 Демонстрация использования

Используя функцию wp_die(), посмотрим что находиться в глобальной переменной $post в данный момент:

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

	wp_die( '<pre>' . var_export( $post, true ) . '</pre>' );
}

Заметки

  • Global. WP_Query. $wp_query WordPress Query object.

Список изменений

С версии 2.0.4 Введена.
С версии 4.1.0 The $title and $args parameters were changed to optionally accept an integer to be used as the response code.
С версии 5.1.0 The $link_url, $link_text, and $exit arguments were added.
С версии 5.3.0 The $charset argument was added.
С версии 5.5.0 The $text_direction argument has a priority over get_language_attributes() in the default handler.

Код wp_die() WP 6.5.2

function wp_die( $message = '', $title = '', $args = array() ) {
	global $wp_query;

	if ( is_int( $args ) ) {
		$args = array( 'response' => $args );
	} elseif ( is_int( $title ) ) {
		$args  = array( 'response' => $title );
		$title = '';
	}

	if ( wp_doing_ajax() ) {
		/**
		 * Filters the callback for killing WordPress execution for Ajax requests.
		 *
		 * @since 3.4.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' );
	} elseif ( wp_is_json_request() ) {
		/**
		 * Filters the callback for killing WordPress execution for JSON requests.
		 *
		 * @since 5.1.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_json_handler', '_json_wp_die_handler' );
	} elseif ( wp_is_serving_rest_request() && wp_is_jsonp_request() ) {
		/**
		 * Filters the callback for killing WordPress execution for JSONP REST requests.
		 *
		 * @since 5.2.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_jsonp_handler', '_jsonp_wp_die_handler' );
	} elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
		/**
		 * Filters the callback for killing WordPress execution for XML-RPC requests.
		 *
		 * @since 3.4.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' );
	} elseif ( wp_is_xml_request()
		|| isset( $wp_query ) &&
			( function_exists( 'is_feed' ) && is_feed()
			|| function_exists( 'is_comment_feed' ) && is_comment_feed()
			|| function_exists( 'is_trackback' ) && is_trackback() ) ) {
		/**
		 * Filters the callback for killing WordPress execution for XML requests.
		 *
		 * @since 5.2.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_xml_handler', '_xml_wp_die_handler' );
	} else {
		/**
		 * Filters the callback for killing WordPress execution for all non-Ajax, non-JSON, non-XML requests.
		 *
		 * @since 3.0.0
		 *
		 * @param callable $callback Callback function name.
		 */
		$callback = apply_filters( 'wp_die_handler', '_default_wp_die_handler' );
	}

	call_user_func( $callback, $message, $title, $args );
}
5 комментариев
    Войти