Функция wp_send_json()
в WordPress используется для отправки JSON-ответа, например, при обработке AJAX-запросов. Она кодирует данные в JSON, отправляет их на клиент и автоматически завершает выполнение скрипта с помощью wp_die()
. Это полезно для отправки структурированных данных в ответ на запросы с клиентской стороны, обеспечивая удобное взаимодействие в рамках AJAX-вызовов.
Функция также устанавливает заголовок Content-Type
как application/json
, что позволяет браузеру распознать формат ответа как JSON.
wp_send_json( mixed $response, int $status_code = null, int $options = 0 )
Параметры
$response
(смешанный) – Обязательный. Данные, которые будут закодированы в JSON и отправлены клиенту. Обычно это массив или объект.$status_code
(целое число) – Необязательный. HTTP-статус, который нужно установить в ответе. Например, можно указать200
для успешного ответа или400
для ошибок.$options
(целое число) – Необязательный. Дополнительные опции для функцииjson_encode()
, например,JSON_PRETTY_PRINT
для удобочитаемого вывода.
Пример 1: Простой JSON-ответ с данными
Код JavaScript для отправки AJAX-запроса:
jQuery(document).ready(function($) {
$('#submit_button').click(function(e) {
e.preventDefault();
$.post(
ajaxurl,
{ action: 'process_ajax_request', input: $('#input_field').val() },
function(response) {
if (response.message) {
alert(response.message + ' ID: ' + response.ID);
}
}
);
});
});
PHP-код для обработки AJAX-запроса и отправки ответа:
add_action('wp_ajax_process_ajax_request', 'process_ajax_request_callback');
function process_ajax_request_callback() {
// Проверка nonce для безопасности
check_ajax_referer('my_nonce', 'security');
$response = [
'message' => 'Данные успешно сохранены',
'ID' => 102
];
wp_send_json($response);
}
Результат: При успешном выполнении JavaScript отобразит сообщение Данные успешно сохранены ID: 102
.
Пример 2: Использование HTTP-статуса и форматирование JSON
Если требуется отправить ошибку или специфический HTTP-статус, можно использовать параметр $status_code
:
function ajax_with_error_status() {
// Проверка данных
if (empty($_POST['input'])) {
wp_send_json(['error' => 'Поле ввода не может быть пустым'], 400, JSON_PRETTY_PRINT);
}
$response = [
'message' => 'Запрос успешно обработан',
'ID' => 205
];
wp_send_json($response, 200, JSON_PRETTY_PRINT);
}
На клиенте можно обработать ошибку по HTTP-статусу:
$.post(
ajaxurl,
{ action: 'ajax_with_error_status', input: '' }, // Пустой input для генерации ошибки
function(response) {
if (response.error) {
alert("Ошибка: " + response.error);
} else {
alert("Успех: " + response.message);
}
}
);
Пример 3: Использование объекта WP_Error
для отправки детализированной ошибки
При необходимости можно использовать объект WP_Error
для более детального ответа с кодами ошибок:
function ajax_with_wp_error() {
if (!is_user_logged_in()) {
$error = new WP_Error('not_logged_in', 'Пожалуйста, войдите в систему, чтобы продолжить.');
wp_send_json($error->get_error_messages(), 403);
}
$response = [
'message' => 'Добро пожаловать, пользователь!',
'ID' => 305
];
wp_send_json($response);
}
На клиенте JSON-ответ будет содержать детализированные ошибки:
{
"0": "Пожалуйста, войдите в систему, чтобы продолжить."
}
Пример 4: Добавление дополнительных флагов JSON для особого форматирования
Для управления особенностями JSON можно задать флаги, например, JSON_UNESCAPED_UNICODE
, чтобы поддерживать неэкранированные символы Unicode.
function ajax_response_with_flags() {
$response = [
'status' => 'успех',
'message' => 'Данные обработаны!'
];
wp_send_json($response, 200, JSON_UNESCAPED_UNICODE);
}
Теперь ответ будет корректно обработан в формате JSON с символами Unicode, не закодированными в \u
.
Заключение
Функция wp_send_json()
позволяет легко обрабатывать и отправлять данные в формате JSON в WordPress. С ее помощью можно удобно управлять статусами HTTP, включать сложные объекты, такие как WP_Error
, и применять специальные флаги для дополнительного форматирования JSON.