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
Гость
7.1 год назад
  • 0
    campusboy4058 www.youtube.com/c/wpplus

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

    алексей 7.1 год назад

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

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

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

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

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

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

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

    алексей 7.1 год назад

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

    Kama 7.1 год назад

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

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

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

    И пример

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

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

    WP_Panda 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 7 лет назад

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

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