WordPress как на ладони
wordpress jino

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

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

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

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

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

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

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

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

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

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

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

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

    Kama 2.5 года назад

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

    Комментировать
  • 0
    WP_Panda158 cайт: wp-panda.com

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

    И пример

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

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

    WP_Panda 2.4 года назад

    К своему стыду не знал про него, всегда пользовал 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 2.4 года назад

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

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