Я создал функцию AJAX в WordPress для своего плагина.В конструкции плагина я определяю обратный вызов AJAX:
public function __construct() {
return $this->register();
}
/**
* Register all new files in WooCommerce hooks
*/
public function register() {
if ( is_user_logged_in() ) {
add_action( 'wp_ajax_filter', array( $this, 'filter' ) );
} else {
add_action( 'wp_ajax_nopriv_filter', array( $this, 'filter' ) );
}
}
Это функция jQuery, которая запускает вызов AJAX:
jQuery(document).ready(function () {
jQuery(document).on('click', '.filter-menu li', function () {
var filter_value = jQuery(this).find('.menu-data-inner');
var data = {
'action': 'filter',
'filter': filter_value.attr('data-value'),
'filter_status': 1
};
var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
jQuery.post(ajaxurl, data, function () {
jQuery('#content-area').load(location.href + ' #content-area>*', '');
});
}
});
});
В конце моего запросаЯ обновляю основной контент WordPress через AJAX и ожидаю, что моя функция в functions.php
get пропущена из-за DOING_AJAX
.
Это функция, которая вызывается по запросу AJAX:
/**
* Filter
*/
public function filter() {
require 'functions/filter.php';
wp_die();
}
Это содержание запроса:
<?php error_log( $_POST['filter'] ); ?>
Итак, моя проблема в том, что я добавил эту функцию в свой functions.php
:
add_action( 'init', 'do_something' );
function do_something() {
error_log('INIT');
}
Но я очень быстро понял, что это вызывает проблему, потому что инициализация get также вызывается по запросу AJAX, но я этого не хочу.Он должен просто напечатать INIT
, когда страница загружается, нажав F5
или введя URL сайта и нажав Enter.Поэтому я добавил проверку:
add_action( 'init', 'do_something' );
function do_something() {
if ( ! wp_doing_ajax() ) {
error_log('INIT')
}
}
Но после повторного вызова AJAX журнал отладки тоже печатает INIT, но не должен.Поэтому я попытался изменить свою функцию, вызываемую во время AJAX, следующим образом:
<?php
error_log( $_POST['filter'] );
define( 'DOING_AJAX', true ); ?>
Но это тоже не помогло.error_log
все еще там.
Так в чем проблема?Что я тут не так делаю?Я имею в виду, я сделал это, как в DOCS, но кажется, что DOING_AJAX не работает для меня.