У меня есть следующий код в моем functions.php
файл.
wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));
add_action( 'wp_ajax_get_my_option', 'get_my_option' );
add_action( 'wp_ajax_nopriv_get_my_option', 'get_my_option' );
function get_my_option()
{
print_r($_POST); exit;
}
И следующий код в global.js
,
jQuery('document').ready(function(){
jQuery("#submit_btn").click(function(){
jQuery.ajax({
url: ajaxadmin.ajaxurl,
data: {'action':'get_my_option', 'test':'test'},
type: "POST",
success: function(response){
}
});
});
});
Но оно всегда возвращается html
код в ответ.
Сценарии и локализации сценариев должны выполняться в wp_enqueue_scripts
Хук действия:
function so_34632421_enqueue_scripts() {
wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));
}
add_action('wp_enqueue_scripts', 'so_34632421_enqueue_scripts');
Прочитайте больше в Кодексе.
Это определенно поздний ответ, но, надеюсь, он может кому-то помочь.
Когда вы локализуете административный URL-адрес WordPress, вы устанавливаете переменную, которая WordPress вставляет на вашу страницу следующим образом:
/* <![CDATA[ */
var bookingajax = {"ajax_url":"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php"};
/* ]]> */
Когда admin-ajax.php является бэкендом вашего плагина, переменная adminajax устанавливается так:
var ajaxurl = '/gss/wp-admin/admin-ajax.php',
Лучший способ проверить, локализован ли URL-адрес ajax, — вывести на консоль заданную вами переменную.
В моем примере я установил локализованный файл admin-ajax.php с помощью bookingajax.
если вы напечатаете эту переменную в console.log (bookingajax), вы увидите, что теперь она хранится в объекте javascript.
И вот решение!
В приведенном выше примере вы все еще используете переменную adminajax. Вам нужно будет добавить подчеркивание, которое установлено в переменной, хранящейся во внешнем интерфейсе, как таковой.
var ajaxurl = bookingajax.ajax_url;
jQuery.ajax({
url: ajaxurl,
data: {'action':'get_my_option', 'test':'test'},
type: "POST",
success: function(response){
}
});