Woocommerce. Какой хук использовать после callback?
Добрый день братья по оружию! Подскажите на какой хук мне можно повесить функцию, чтобы она выполнялась после вызова callback api listen-ера? Просто после вызова callback мне требуется сделать ряд действий, но callback заканчивается через exit; и следующая функция добавленная в add_action на этот хук с меньшим приоритетом, чтобы выполниться после ответа серверу на запрос, естественно, не выполняется уже. Подскажите тогда следующий хук после выполнения wc_api callback - чтобы после его выполнения заюзать функцию.
// Payment listener/API hook add_action('woocommerce_api_my_gateway', array($this, 'check_callback_response'),10); add_action('woocommerce_api_my_gateway', array($this, 'next_after_callback_function'),20); function check_callback_response() { if ( ! empty( $_POST ) ) { header( 'HTTP/1.1 200 OK' ); do_action( "valid-callback-request", $_POST ); } else { wp_die( "Failure" ); } exit(); } function next_after_callback_function() { //some code here }
Думаю, тут надо поиграться с do_action и add_action!
Да, но на какой хук цеплять add_action? Ведь выход заканчивается через exit - остановкой интерпритатора php. Просто я не знаю - какие дальше идут хуки чтобы на них зацепить функцию. Или как-то можно сделать хук который будет выполняться после этого действия?
Чем не подходит хук внутри check_callback_response()?
Ну а вообще, чтобы сделать что-то после завершения работы php, есть в ВП хук
shutdown
, в частности он срабатывает при вызове exit();Кама, спасибо за ответ.
Так мне внутри не надо - мне надо после выполнения check_callback_response() - после того как он завершится и выплюнет всё в буфер - чтобы ответить на входящий запрос и только после ответа - вызвать следующую функцию. А если этот вызов будет внутри check_callback_response - то я выполню функцию до того как выплюну в буфер ответ на запрос. Вот. Может у тебя ещё есть какие-то мысли как это можно вызвать после этой функции а не в ней. Буду очень благодарен!
Про do_last_work обязательно сегодня посмотрю.
Вообщем попробовал оба способа. Даже с использованием ob_start - ob_flush функция выплёвывает буфер только при exit. И соответственно вторая функция, которую надо выполнить после ответа серверу - выполняется получается до того, как первая функция отправит результат своего выполнения в буфер в ответ на запрос сервера. Что есть ob_flush, что нет. Тоже самое и при использовании хука на shutdown. Вторая функция выполняется до того как произошел ответ в буфер. Как быть даже не знаю ((( Подскажите кто знает.
Похоже тут решение это как-то прикрутить AJAX запрос или придумать что-то еще: где PHP сценарий будет запускаться 2 раза: 1 - заканчивает сценарий, 2 - запускает еще один и обрабатывает результаты первого. Если найдете решение сюда тоже отпишитесь пожалуйста.
есть крутая штука называется register_shutdown_function(), думаю именно ваш вариант.
И вопрос чисто любопытства для, зачем в платежном шлюзе запускать что-то, после вывода ответа? У него API несколько другое.
И пример
WP хук "shutdown" как раз вызывает register_shutdown_function();
К своему стыду не знал про него, всегда пользовал PHP функцию.
тут надо совмещать
sleep() // для наглядности