wp_send_json()

Возвращает ответ в виде JSON в асинхронном AJAX-запросе.

«Возвращает» – это не значит, что результат действия функции можно присвоить в переменную. Тут имеется ввиду именно ответ от запроса AJAX.

Функция также прерывает выполнение PHP-кода в запросе функцией wp_die() и добавляет в заголовок ответа Content-Type: application/json.

На её основе работают очень похожие функции wp_send_json_success() и wp_send_json_error().

Кстати, если вы не чувствуете, что хорошо разбираетесь в асинхронных запросах WordPress, тогда я хочу порекомендовать вам свой видеокурс.

wp_send_json( $response, $status_code = null, $options = 0 )

Параметры

$data
Данные, которые нужно преобразовать в JSON.
$status_code
(целое) Код ответа сервера. Их список можно найти здесь.
 
С версии WordPress 4.7.0
$options
В этом параметре можно передать один или несколько флагов-констант, задающих правила преобразования в JSON, эти константы описаны в документации PHP.
 
Использовать можно следующие константы: JSON_FORCE_OBJECT, JSON_HEX_QUOT, JSON_UNESCAPED_UNICODE, JSON_INVALID_UTF8_IGNORE, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_INVALID_UTF8_SUBSTITUTE, JSON_UNESCAPED_LINE_TERMINATORS, JSON_NUMERIC_CHECK, JSON_PARTIAL_OUTPUT_ON_ERROR, JSON_PRESERVE_ZERO_FRACTION, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_THROW_ON_ERROR
 
С версии WordPress 5.6.0

Пример

В каких же ситуациях нам нужно получать ответ из асинхронного запроса в виде JSON?

Хороший пример – использование в фильтрации товаров. Допустим, что мы получаем несколько отдельных кусков данных из запроса – во-первых, отфильтрованные товары, во-вторых, какой-нибудь счётчик количества, типо «Найдено 5 товаров». И суть в том, что в вёрстке товары и счётчик количества выводятся в обсолютно разных местах. Поэтому мы должны получить их отдельно, чтобы не изменять весь HTML.

Давайте взглянем, как оно происходит непосредственно в JavaScript:

$( '#ajaxfilter' ).submit( function( event ) {
	event.preventDefault();
 
	const el = $(this);
 
	$.ajax({
		type : 'POST',
		url : ajax_url,
		data : el.serialize(),
		beforeSend : function( xhr ) {
			// врубаем анимацию прелоадера например
		},
		success : function( data ) {
			// отдельно – сами товары
			$( '.products-wrapper' ).html( data.content );
			// отдельно – счётчик товаров
			$( '.woocommerce-result-count' ).text( data.result_text );
		}
	});
} );

Дальше – PHP-код внутри запроса. Я даже ограничусь строчками с использованием wp_send_json() функции, если вам интересен полный пример – он тут.

// $content – в этой переменную мы записали HTML отфильтрованных
// $found_products – в этой переменной число найденных товаров
 
wp_send_json( array(
	'content' => $content,
	'result_text' => 'Всего товаров: ' . $found_products
) );

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал