Как вызвать ajax в файле плагина
Я совсем новичок в работе с ajax в wordpress. Здесь я получаю значение выбранной опции в var test
с помощью функции ниже. Когда я вывожу его через alert, оно показывает правильное значение.
Это значение var test
я хочу отправить с помощью ajax и получить его в PHP переменной.
Мне нужно вызвать ajax и получить значение скриптовой переменной var test
в php в файле плагина, где у меня есть обе функции и select box.
JQuery Функция.
jQuery("#time_slot").change(function()
{
var test= time_slot.value;
alert(test);
});
Select Box
<select name="time_slot" id="time_slot" class="time_slot">
<option value="">Выберите время</option>
<option value="1:00 - 3:00">01:00 AM-03:00 AM</option>
<option value="3:00 - 5:00">03:00 AM-05:00 AM</option>
</select>

Используйте встроенные AJAX-действия WordPress:
Ваш jQuery-код будет выглядеть так:
$('#ajax_form').bind('submit', function() {
var form = $('#ajax_form');
var data = form.serialize();
data.action = 'MyPlugin_GetVars'
$.post('/wp-admin/admin-ajax.php', data, function(response) {
alert(response);
});
return false;
Код вашего плагина может выглядеть примерно так:
add_action("wp_ajax_MyPlugin_GetVars", "MyPlugin_GetVars");
add_action("wp_ajax_nopriv_MyPlugin_GetVars", "MyPlugin_GetVars");
function MyPlugin_GetVars(){
global $wpdb;
// используйте $wpdb для вставки данных
// Выполняйте AJAX-действия здесь
// Вы можете использовать include('/wp-content/plugins/test/getvars.php'), но лучше
// избегать этого и перенести код прямо в эту функцию
}
Для получения дополнительной информации посетите AJAX в плагинах

пожалуйста, посмотрите ниже, это может вам помочь. Вот ваш код на PHP.
<?php
function ajax_enqueuescripts() {
wp_enqueue_script('ajaxloadpost', plugins_url().'/your-plugin-name/js/my-ajax.js', array('jquery'));
wp_localize_script( 'ajaxloadpost', 'ajax_postajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
add_action('wp_enqueue_scripts', ajax_enqueuescripts);
add_action('wp_ajax_nopriv_ajax_ajaxhandler', 'my_action_callback' );
add_action('wp_ajax_ajax_ajaxhandler', 'my_action_callback' );
function my_action_callback(){
print_r($_GET);
die;
}
А вот ваш код на JS. Вам нужно создать новый JS-файл и поместить в него следующий код.
jQuery(document).ready(function(){
jQuery("#time_slot").change(function()
{
var test= time_slot.value;
jQuery.ajax({
type: 'GET',
url: ajax_postajax.ajaxurl,
data: {
action: 'ajax_ajaxhandler',
test : test
},
success: function(data) {
alert(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error");
}
});
return false;
});
});
Для более подробной информации вы можете проверить здесь

что делать с этим /your-plugin-name/js/my-ajax.js, можно подробнее

Вам нужно поместить ваш JS-код в my-ajax.js (название файла JS). Таким образом, "/your-plugin-name/js/my-ajax.js" будет путем к вашему JS-файлу.

booking.php - это имя файла, где я получаю значение Jqery, которое нужно отправить через ajax-запрос. Где мне разместить эту функцию ajax_enqueuescripts() { и можно ли создать js-файл внутри файла booking.php, а также можно ли указать имя этого js-файла в

получаю ошибку parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION на этой строке с хуком add_action('wp_enqueue_scripts', ajax_enqueuescripts);

я сделал всё, что вы сказали в ответе, но получаю указанную выше ошибку

Я использую тот же код, что и выше в моём сообщении, но у меня всё работает нормально.

когда я добавляю хуки действий вверху, ошибок не возникает, но ajax не вызывается, проверьте ссылку и пропустите опцию Gender, она не используется, выберите сразу календарь и затем время http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

я не увидел ваш комментарий, можете снова прокомментировать на сайте администратора

Привет, санджай, пожалуйста, возьми файл моего плагина отсюда

И насчет того комментария в админке, пожалуйста, просто проигнорируй его.

Мой плагин уже использует эти хуки: add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_css' )); add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_js' ));

Где вы отобразили ваш выпадающий список - в админке или на фронтенде?

Добавьте это в PHP-страницу вашего плагина
add_action("wp_ajax_ajax_plugin_call", "ajax_plugin_call_callback");
add_action("wp_ajax_nopriv_ajax_plugin_call", "ajax_plugin_call_callback");
Ajax-функция в PHP-странице
function ajax_plugin_call_callback{
global $wpdb;
print_r($_POST) ;
// напишите ваш PHP-код
die;
}
Ваш JavaScript-код должен выглядеть так
jQuery(document).ready(function(){
jQuery('#formID').bind('submit', function() { // Кнопка отправки формы
var form_value = jQuery('#formID');
var form_data = form_value.serialize(); // Сериализация формы
form_data['action']='ajax_plugin_call'; // Действие
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>',form_data,function(response){
// Здесь будет Ajax-ответ
});
}
});
Проверьте это, это поможет вам в работе с Ajax-запросами в WordPress-плагине.

Спасибо за ваш ответ, но, пожалуйста, уточните. Ваш ответ считается дампом кода.

@engelen эй, я использовал ajax вот так: var data = { current_datedddd: sdfdsfsdf, post_id: "'.$duplicate_of.'", action: "call_addon_price1" '.$attribute_fields_str.' }; alert(sdfdsfsdf); он отправляет значение времени, но в функции action: "call_addon_price1" я не могу сохранить в переменную используя POST

@engelen ты можешь проверить мой ajax запрос http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

Я использую следующий код для вызова AJAX, и он работает корректно.
Здесь я отправляю переменную time
на эту страницу с помощью POST $.post("'. plugins_url().'/woocommerce-booking/gettime.php",
var time=0;
jQuery("#time_slot").change(function()
{
time=time_slot.value;
$.post("'. plugins_url().'/woocommerce-booking/gettime.php",
{name: time},
function(response){
console.log(response);
}
);
});
Мой файл gettime.php выглядит следующим образом и получает ответ от моего AJAX-вызова.
<?php session_start();
echo $name= $_POST["name"];
file_put_contents("name.txt", $name)
?>

Сначала вам необходимо подключить скрипт и определить URL. Затем нужно создать функцию для AJAX-колбэка и добавить действие WordPress, которое будет её вызывать. Вот видео, где я объясняю этот процесс, надеюсь, поможет. :)
