Intereting Posts
Удаление кнопок из редактора отключить поле поиска admin-bar для определенных ролей Существует ли плагин wordpress (а не членский) для продажи доступа к некоторым веб-страницам? WordPress возвращает старый размер эскиза после изменения настроек мультимедиа Более простой способ отображения персонализированной мета-почты? Как отображать заголовки категорий на странице WP? Ошибка белого экрана смерти Как собрать ключевые слова и данные поисковой системы в веб-формах? Изменение элемента в раскрывающемся списке после 5 последних сообщений в таксономии Переписать правила в .htaccess получить перезапись? Как отобразить некоторые выбранные метаданные пользователя на определенной странице с помощью короткого кода? Запрос SQL для обновления meta_value для одного meta_key для всех post_type = product Можно ли публиковать сообщения в типе персонализированной персонализации? WordPress – изображение href для домашнего меню nav не работает Как получить идентификатор пользователя при регистрации и добавить в пользовательскую таблицу

Добавление функции обратного вызова для wp_ajax_ не влияет

Я пытался добавить еще одну функцию обратного вызова в действие WordPress AJAX woocommerce_apply_coupon .

Это действие определено в плагине WooCommerce, я хочу добавить свою собственную функцию обратного вызова к этому действию из моего файла плагина.

То, что я пробовал:

 add_action( 'wp_ajax_nopriv_woocommerce_apply_coupon','darn',999); add_action( 'wp_ajax_woocommerce_apply_coupon', 'darn',999); function darn(){ print_r($_REQUEST); exit; } 

Выполнение этого в моих functions.php даже не показывает никаких ошибок, например, я не вижу никакого эффекта этого кода.

Я хочу знать, можно ли это достичь. Спасибо.

Да. Это возможно, и вы на правильном пути! 🙂

AJAX-вызовы происходят «за кулисами», и во время процесса не генерируется экранный вывод, независимо от того, что вы echo или print_r – вот почему вы не видите ничего, возвращаемого вам, вместо этого ответ сервера захватывается javascript и действует там.

Это дает вам два основных варианта для отладки ваших действий AJAX:

1) Вы можете использовать error_log() в своих действиях AJAX для записи вывода в файл WP_DEBUG_LOG и проверить результаты там:

 function darn(){ error_log( print_r($_POST, 1) ); exit; } 

Подробнее см. В Codex: Debugging_in_WordPress – WP_DEBUG_LOG

Pro-tip # 1: Запустите консоль терминала и используйте tail -f debug.log для реального потока отладки awesomness;)

Pro-tip # 2: Используйте tail -f debug.log | grep -v 'bad-plugin' tail -f debug.log | grep -v 'bad-plugin' чтобы отфильтровывать слишком много отладочной awesomness от авторов плагинов, которые не используют WP_DEBUG_LOG ; P

2) Используйте собственный console.log() javascript, чтобы проверить ответ прямо в браузере:

Отправить ответ от действия AJAX …

 function darn(){ echo 'darn!' exit; } 

… и получать его с помощью JS:

 $.post(ajaxurl, data, function(response) { // Response will be 'darn!' if( typeof(console) == 'object' ) console.log( response ); }); 

Pro-tip # 3: вместо простого повторения ответа, как мы это делали выше, вы можете использовать wp_send_json () для генерации отформатированного ответа JSON или класса WP_Ajax_Response для XML. Удобен для более сложных ответов и / или обработки ошибок!

Pro-tip # 4: дайте мне знать в комментариях, если что-то остается неясным: D

Добро пожаловать и отлично проводите время на WPSE!

Если какой-то другой код обработчика сначала подключен, и он также вызывает exit() , тогда сценарий заканчивается, поэтому ваш код никогда не запускается.

Проверьте другой обработчик.