wp_send_json()WP 3.5.0

Кодирует переданную переменную в JSON, печатает результат на экран (echo) и обрывает работу скрипта (die). Используется для возврата данных при AJAX запросах.

Функция устанавливает header заголовок:

@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
Работает на основе: wp_json_encode()

Хуков нет.

Возвращает

null. Прерывает работу скрипта.

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

wp_send_json( $response, $status_code, $options );
$response(строка/массив/число/объект/логический) (обязательный)
Переменная, обычно массив или объект, которая будет кодирована в JSON.
$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 Пример отправки Ajax запроса и возврат JSON результата

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

jQuery(document).ready(function(){

	jQuery('#btn_save').click(function(e){
		e.preventDefault();
		jQuery.post( pluginUrl+'ajax/save_field.php', jQuery('#my-form').serialize(), function(data) {
				alert(data.message + " ID:" + data.ID);
				//This will alert "Saved ID:1"
		});
	});

});

Это код файла, который принимает запрос. Тут используется wp_send_json() для того, чтобы удобно вернуть результат в JSON формате:

<?php
// подгружаем WP
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

$nonce = $_POST['_wpnonce_name'];
if( empty($_POST) || ! wp_verify_nonce($nonce, 'my-nonce') ) die('Security check');

$return = array(
	'message'   => 'Сохранено',
	'ID'        => 1
);

wp_send_json( $return );

// функция сама прерывает работу скрипта
// поэтому тут не нужны всякие die или exit

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

С версии 3.5.0 Введена.
С версии 4.7.0 The $status_code parameter was added.
С версии 5.6.0 The $options parameter was added.

Код wp_send_json() WP 6.4.3

function wp_send_json( $response, $status_code = null, $options = 0 ) {
	if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: 1: WP_REST_Response, 2: WP_Error */
				__( 'Return a %1$s or %2$s object from your callback when using the REST API.' ),
				'WP_REST_Response',
				'WP_Error'
			),
			'5.5.0'
		);
	}

	if ( ! headers_sent() ) {
		header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
		if ( null !== $status_code ) {
			status_header( $status_code );
		}
	}

	echo wp_json_encode( $response, $options );

	if ( wp_doing_ajax() ) {
		wp_die(
			'',
			'',
			array(
				'response' => null,
			)
		);
	} else {
		die;
	}
}