wp_send_json_error()
Возвращает 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() — противоположная этой функция. Возвращает успешный ответ.
Хуков нет.
Возвращает
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
Примеры
#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' );
#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 $value 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 $flags parameter was added. |