WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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
}
1
Гость
8.9 лет назад
  • 0
    campusboy4748 www.youtube.com/c/wpplus

    Думаю, тут надо поиграться с do_action и add_action!

    алексей 8.9 лет назад

    Да, но на какой хук цеплять add_action? Ведь выход заканчивается через exit - остановкой интерпритатора php. Просто я не знаю - какие дальше идут хуки чтобы на них зацепить функцию. Или как-то можно сделать хук который будет выполняться после этого действия?

    Комментировать
  • 0
    Kama9616

    Чем не подходит хук внутри check_callback_response()?

    do_action( "valid-callback-request", $_POST );

    Ну а вообще, чтобы сделать что-то после завершения работы php, есть в ВП хук shutdown, в частности он срабатывает при вызове exit();

    add_action('shutdown', 'do_last_work');
    function do_last_work(){
    	echo 'последний вздох :)';
    }
    алексей 8.9 лет назад

    Кама, спасибо за ответ.
    Так мне внутри не надо - мне надо после выполнения check_callback_response() - после того как он завершится и выплюнет всё в буфер - чтобы ответить на входящий запрос и только после ответа - вызвать следующую функцию. А если этот вызов будет внутри check_callback_response - то я выполню функцию до того как выплюну в буфер ответ на запрос. Вот. Может у тебя ещё есть какие-то мысли как это можно вызвать после этой функции а не в ней. Буду очень благодарен!
    Про do_last_work обязательно сегодня посмотрю.

    алексей 8.9 лет назад

    Вообщем попробовал оба способа. Даже с использованием ob_start - ob_flush функция выплёвывает буфер только при exit. И соответственно вторая функция, которую надо выполнить после ответа серверу - выполняется получается до того, как первая функция отправит результат своего выполнения в буфер в ответ на запрос сервера. Что есть ob_flush, что нет. Тоже самое и при использовании хука на shutdown. Вторая функция выполняется до того как произошел ответ в буфер. Как быть даже не знаю ((( Подскажите кто знает.

    Kama 8.9 лет назад

    Похоже тут решение это как-то прикрутить AJAX запрос или придумать что-то еще: где PHP сценарий будет запускаться 2 раза: 1 - заканчивает сценарий, 2 - запускает еще один и обрабатывает результаты первого. Если найдете решение сюда тоже отпишитесь пожалуйста.

    Комментировать
  • 0
    WP_Panda166 wp-panda.com

    есть крутая штука называется register_shutdown_function(), думаю именно ваш вариант.
    И вопрос чисто любопытства для, зачем в платежном шлюзе запускать что-то, после вывода ответа? У него API несколько другое.

    И пример

    function first(){
    	die('Сдохла первая функция');
    }
    
    function shutdown()
    {
    	echo nl2br("\r\nОднако вторая отработала",false);
    }
    register_shutdown_function('shutdown');
    first();
    Kama 8.7 лет назад

    WP хук "shutdown" как раз вызывает register_shutdown_function();

    WP_Panda 8.7 лет назад

    К своему стыду не знал про него, всегда пользовал PHP функцию.

    Даже с использованием ob_start - ob_flush функция выплёвывает буфер только при exit. И соответственно вторая функция, которую надо выполнить после ответа серверу - выполняется получается до того, как первая функция отправит результат своего выполнения в буфер в ответ на запрос сервера. Что есть ob_flush, что нет. Тоже самое и при использовании хука на shutdown.

    тут надо совмещать

    function first(){
    ob_start();
    echo 'Сдохла первая функция';
    ob_end_flush();    
    flush();
    ob_end_clean();
    die();
    }
    
    function shutdown()
    {
    sleep(5);
    	echo nl2br("\r\nОднако вторая отработала",false);
    }
    //register_shutdown_function('shutdown');
    add_action('shutdown','shutdown');
    first();
    WP_Panda 8.7 лет назад

    sleep() // для наглядности

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация