wp_send_json_error()WP 3.5.0

Возвращает JSON данные. Используется для возврата ошибок в AJAX запросах. Ответ будет всегда содержать элемент success=false. Обрывает работу php скрипта (die).

Функция также устанавливает header заголовок и обрывает работу PHP скрипта через die():

@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );

Просто вызов wp_send_json_error() не установит ответ ошибки - вместо нее вернется 200. Поэтому, если нужно указать что AJAX запрос провалился, обязательно укажите код ошибки, например 500, в параметре $status_code.

С версии 4.1. Если в параметр $data передать объект WP_Error, то он будет обработан и функция вернет массив с сообщением об ошибке. Т.е. функция понимает переданный WP_Error объект.

wp_send_json_success() — противоположная этой функция. Возвращает успешный ответ.

Работает на основе: wp_send_json()

Хуков нет.

Возвращает

null. Выводит на экран данные и обрывает работу php.

// Вид возвращаемых данных, перед кодированием в JSON:
array( 'success' => false );
array( 'success' => false, 'data' => $data ); // если указан $data

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

wp_send_json_error( $data, $status_code, $options );
$data(строка/массив/число/объект/логический)
Данные, которые будут добавлены в результат в элемент массива data, перед кодирование в JSON.
По умолчанию: null
$status_code(число)
HTTP статус код, который нужно установить. Какие бывают статус коды, смотрите здесь. C WP 4.7.
По умолчанию: null
$options(число) (WP 5.6)

Опции которые будут переданы в функцию json_encode(). Битовая маска, составляемая из значений:

JSON_FORCE_OBJECT
JSON_HEX_QUOT
JSON_HEX_TAG
JSON_HEX_AMP
JSON_HEX_APOS
JSON_INVALID_UTF8_IGNORE
JSON_INVALID_UTF8_SUBSTITUTE
JSON_NUMERIC_CHECK
JSON_PARTIAL_OUTPUT_ON_ERROR
JSON_PRESERVE_ZERO_FRACTION
JSON_PRETTY_PRINT
JSON_UNESCAPED_LINE_TERMINATORS
JSON_UNESCAPED_SLASHES
JSON_UNESCAPED_UNICODE
JSON_THROW_ON_ERROR

Смысл этих констант объясняется на странице JSON констант.
По умолчанию: 0

Примеры

0

#1 Возврат ошибки в JSON формате при AJAX ответе

Этот jQuery код отправляет AJAX запрос на страницу плагина ajax/save_field.php:

fetch( `${ pluginUrl }/ajax/save_field.php` )
	.then( resp => resp.json() )
	.then( res => {
		if( res.success ){
			alert( res.data )
		}
		// error
		else {
			alert( res.data )
		}
	} )

Это код файла save_field.php, который обрабатывает переданный запрос. Здесь показано, как возвращать ошибки:

<?php

$nonce = $_POST['_wpnonce_name'];

// print json given success=false
if ( empty( $_POST ) || ! wp_verify_nonce( $nonce, 'my-nonce' ) ) {
	wp_send_json_error( 'Error messege' ); 
}

// it is not necessary to use die here

wp_send_json_success( 'OK message' ); 
0

#2 Передача WP_Error в $data

В параметр $data можно передать объект WP_Error.

$error = new WP_Error( 'error_code', 'ERROR: Wrong credentials.' );

wp_send_json_error( $error );

Теперь при получении данных в JS ответ (response) будет содержать массив всех ошибок в таком виде (обычно там всего один элемент):

{
	success: false,
	data: [
		0: { code: 'error_code', message: 'ERROR: Wrong credentials.' }
	]
}

Т.е. сообещние об ошибке можно получить так:

response.data[0].message

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

С версии 3.5.0 Введена.
С версии 4.1.0 The $data parameter is now processed if a WP_Error object is passed in.
С версии 4.7.0 The $status_code parameter was added.
С версии 5.6.0 The $options parameter was added.

Код wp_send_json_error() WP 6.1.1

function wp_send_json_error( $data = null, $status_code = null, $options = 0 ) {
	$response = array( 'success' => false );

	if ( isset( $data ) ) {
		if ( is_wp_error( $data ) ) {
			$result = array();
			foreach ( $data->errors as $code => $messages ) {
				foreach ( $messages as $message ) {
					$result[] = array(
						'code'    => $code,
						'message' => $message,
					);
				}
			}

			$response['data'] = $result;
		} else {
			$response['data'] = $data;
		}
	}

	wp_send_json( $response, $status_code, $options );
}