Бесконечный цикл WordPress (wp_doing_ajax)

Дoбрый дeнь. Если использовать фильтр wp_doing_ajax, то он срабатывает и при вызове функции wp_send_json_error(), соответственно получается бесконечный цикл:

add_filter( 'wp_doing_ajax', 'call_ajax_test' );
function call_ajax_test( $wp_doing_ajax ) {
  wp_send_json_error();
  return $wp_doing_ajax;
}

wp_send_json('test'); // Делаем первый AJAX-запрос

Результат:

1) wp_send_json('test') -> wp_doing_ajax -> wp_send_json_error()
2) wp_doing_ajax -> wp_send_json_error()
3) wp_doing_ajax -> wp_send_json_error()
4) wp_doing_ajax -> wp_send_json_error()
5) ...

Вопрос: как вызвать wp_send_json_error() и избежать бесконечного цикла?

P.S. Вроде разобрался, но остался другой вопрос. Данный add_filter ожидает return, а wp_send_json_success() или wp_send_json_error() после своего выполнения обрывает работу при помощи die() и return не происходит :(


Ответы (1 шт):

Автор решения: Darth KYL

чтоб не было зацикливания вам нужно удалить ваш фильтр перед вызовом wp_send_json

add_filter( 'wp_doing_ajax', 'call_ajax_test' );

function call_ajax_test( $wp_doing_ajax ) {
    remove_filter( 'wp_doing_ajax', 'call_ajax_test' );

    wp_send_json_success();

    add_filter( 'wp_doing_ajax', 'call_ajax_test' );

    return $wp_doing_ajax;
}

wp_send_json('test');
→ Ссылка