Использование wp_die()
- лучший из этих вариантов.
Как уже отмечали другие, есть много причин, чтобы предпочесть специфическую для WordPress функцию простой die
или exit
:
- Это позволяет другим плагинам подключаться к действиям, вызываемым
wp_die()
.
- Это позволяет использовать специальный обработчик для выхода на основе контекста (поведение
wp_die()
настраивается в зависимости от того, является ли запрос запросом Ajax или нет).
- Это позволяет проверить ваш код.
Последнее является более важным, поэтому я добавил эту заметку в Кодекс . Если вы хотите создать модульные / интеграционные тесты для своего кода, вы не сможете протестировать функцию, которая вызывает exit
или die
напрямую. Это прекратит работу скрипта, как и положено. Способ, которым собственные тесты WordPress настроены, чтобы избежать этого (для обратных вызовов Ajax, для которых у него есть тесты), состоит в том, чтобы подключиться к действиям, инициируемым, wp_die()
и вызвать исключение. Это позволяет поймать исключение в тесте и проанализировать выходные данные обратного вызова (если есть).
Единственный раз, когда вы будете использовать die
или exit
, если вы хотите обойти какую-либо специальную обработку wp_die()
и немедленно завершить выполнение. В некоторых местах WordPress делает это (и в других местах, где его можно использовать die
напрямую только потому, что обработка from wp_die()
не важна, или пока никто не пытался создавать тесты для фрагмента кода, поэтому об этом не обращали внимания). Помните, что это также делает ваш код более сложным для тестирования, поэтому он обычно используется только в коде, который в любом случае не находится в теле функции (как это делает WordPress admin-ajax.php
). Так что, если обработка от wp_die()
специально не желательна, или вы убиваете сценарий в определенный момент в качестве меры предосторожности (например,admin-ajax.php
ожидает, что обычно обратный вызов Ajax уже будет правильно завершен), тогда вы можете рассмотреть возможность использования die
напрямую.
Что касается wp_die()
vs, то wp_die( 0 )
, что вы должны использовать, зависит от того, что обрабатывает ответ на этот запрос Ajax на внешнем интерфейсе. Если он ожидает конкретного тела ответа, то вам нужно передать это сообщение (или целое число, в данном случае) wp_die()
. Если все, что он прослушивает, - это успешный 200
ответ ( код ответа или что-то еще), то нет необходимости передавать что-либо wp_die()
. Я хотел бы отметить, однако, что окончание с помощью wp_die( 0 )
сделает ответ неотличимым от admin-ajax.php
ответа по умолчанию . Таким образом, завершение 0
не говорит вам, был ли ваш обратный вызов правильно подключен и действительно запущен. Другое сообщение было бы лучше.
Как указано в других ответах, вы часто найдете wp_send_json()
et al. быть полезным, если вы отправляете ответ в формате JSON, что, как правило, является хорошей идеей. Это также лучше, чем просто вызов wp_die()
с кодом, потому что вы можете передать гораздо больше информации обратно в объект JSON, если это необходимо. Использование wp_send_json_success()
и wp_send_json_error()
также отправит сообщение об успехе / ошибке обратно в стандартном формате, который смогут понять любые вспомогательные функции JS Ajax, предоставляемые WordPress (например wp.ajax
).
TL; DR: Вы, вероятно, должны всегда использовать wp_die()
, будь то обратный вызов Ajax или нет. Еще лучше, отправьте информацию обратно wp_send_json()
и друзьям.
die
вместоwp_die()
.die()
а иногдаwp_die()
.die()
, в некоторых случаях это просто устаревший код илиdie()
используется для уничтожения сценария в качестве крайней меры, когда произошло что-то действительно неожиданное иwp_die()
не вызванное. В других случаях никто не создавал тесты для фрагмента кода, и специальная обработка изwp_die()
него специально не нужна, поэтому он упускается из виду.Из кодекса AJAX в плагинах
источник
wp_send_json_*
функции используют все,wp_send_json
что до сих пор вызываетwp_die
wp_send_json
в ответ?Вы также можете использовать
wp_send_json()
описанные в Кодексе какsend a JSON response back to an AJAX request, and die().
Итак, если вам нужно вернуть массив, у вас есть только конец вашей функции
wp_send_json($array_with_values);
. Нет необходимостиecho
илиdie
.Вы также можете получить две справки вспомогательных функций
wp_send_json_success()
иwp_send_json_error()
который добавляет ключ с именем ,success
которое будетtrue
илиfalse
соответственно.Например:
источник
wp_json_encode
в случае исключения может вернуть false, что в таком случае?wp_send_json()
это лучший способ? Почему?wp_send_json()
делает кое-что для нас. Этот вопрос также касаетсяwp_send_json()
.Для использования WordPress ajax / woo commerce ajax общий синтаксис выглядит следующим образом:
Вы должны использовать wp_die () в конце функции. Так как wordpress внутренне использует фильтр во время функции wp_die (). Поэтому любой плагин, который работает с этим фильтром, может не работать, если мы не включим wp_die (). Также die () и другие функции немедленно убивают выполнение PHP без учета какой-либо функции wordpress, которую следует учитывать при прекращении выполнения.
Если вы используете wp_send_json () внутри, вы работаете так
Нет необходимости использовать wp_die () в конце, если вы включили wp_send_json () в функцию обратного вызова . потому что сам WordPress безопасно использует функцию wp_die () внутри функции wp_send_json ().
источник
Это только в дополнение к тому, что сказали другие. Причина, по которой
wp_die
стоит отдать предпочтение, заключается в том, что ядро может инициировать действия там, а плагины могут правильно выполнять такие вещи, как трассировка, мониторинг или кэширование.В общем, вы всегда должны предпочитать основной вызов API, если он доступен, так как он, скорее всего, добавляет какое-то значение (кэширование, интеграция с плагином или что-то еще), которое вы не получите от прямого вызова PHP.
источник
Я не приму этот ответ, это не будет справедливым. Я просто хотел создать схему и возможные подсказки для пунктов, которые я считаю важными:
Основное определение wp-die ()
wp_send_json
wp_doing_ajax
Обычно то, что мы получаем от вызова ajax, является своего рода ответом. Ответ может быть закодирован в json или не закодирован в json.
На случай, если нам понадобится
json
перехватwp_send_json
или два спутника - отличная идея.Тем не менее, мы можем вернуть
x-www-form-urlencoded
илиmultipart/form-data
илиtext/xml
или любой другой тип кодирования. В этом случае мы не используемwp_send_json
.Мы можем вернуть весь html, и в этом случае имеет смысл использовать
wp_die()
первый и второй параметр, иначе эти параметры должны быть пустыми.Но в чем выгода звонить
wp_die()
без параметров?Наконец, если вы проверите отличное ядро WP, вы можете найти
Оба формата используются
die()
иwp_die()
. Вы можете объяснить, почему?Наконец, вот что
admin-ajax.php
возвращаетсяdie( '0' );
Почему нет
wp_die(...)
?источник
Использование
wp_die()
. Лучше использовать функции WordPress как можно чаще.источник
Если вы используете
echo
, это заставит вас использоватьdie()
илиdie(0)
илиwp_die()
.Если вы не используете
echo
, JavaScript может справиться с этим.Затем вы должны использовать лучший способ вернуть данные:
wp_send_json()
.Чтобы отправить данные в вашем обратном вызове (в
json
формате), вы можете использовать следующие:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Все они умрут за тебя. Нет необходимости выходить или умирать потом.
ОБНОВИТЬ
И если вам не нужен
json
формат вывода, вы должны использовать:wp_die($response)
Он вернет ваш ответ, прежде чем он умрет. Согласно кодексу:
Пожалуйста, прочитайте полную статью кодекса здесь .
источник
echo
?echo
.wp_send_json_*
используетecho
и выходит для вас. Здесь есть путаница между клиентом и сервером.json
формат вывода?