Раньше я пользовался CMS Joomla! и совсем недавно решил попробовать WordPress. мое мнение - Небо и Земля! Для WordPress оказалось писать легче, чем для Joomla!
В свете последних разработок хочу поделиться опытом использования AJAX. Все довольно удобно и просто. Для отправки запроса средствами AJAX с помощью WordPress нужно знать 2 вещи:
В свете последних разработок хочу поделиться опытом использования AJAX. Все довольно удобно и просто. Для отправки запроса средствами AJAX с помощью WordPress нужно знать 2 вещи:
- Адрес запроса /wp-admin/admin-ajax.php
- Обязательный параметр action
Идея
У нас есть электронный счет на оплату и у него есть кнопка подтверждения, что он оплачен. Для этого нужно просто отправить запрос с идентификатором счета.
С технической стороны - это кнопка submit для формы. Кнопка будет вставлять идентификатор счета в скрытое поле. На событие onsubmit формы будет отрабатывать наш JavaScript и отправлять AJAX запрос.
Step-by-step
Шаг 1. Создание JS файла
Создадим файл JS, который будет отправлять AJAX запрос. Путь к файлу, относительно папки плагина: /assets/js/orders.js
jQuery(document).ready(function() { // Каждой кнопке SUBMIT навесим событие jQuery('.wplspms-order-submit').click(function() { // Узнаем код счета из атрибута order-code нажатой кнопки var code = jQuery(this).attr('order-code'); // Положим полученный код в скрытое поле формы jQuery('#wplspms-order-code').val(code); }); // Переопределим событие SUBMIT у формы jQuery('#order-form').submit(function() { // Узнаем значение кода счета var code = jQuery('#wplspms-order-code').val(); // Параметры запроса data = { action: 'wplspms_confirm_order', code: code }; // Отправка POST запроса через AJAX jQuery.post(ajaxurl, data, function(response) { // Результат запишем вместо ячейки с кнопкой jQuery('#' + code).html(response); }); // Вернем FALSE что бы не отработал непосредственно SUBMIT формы return false; }); });
Что тут интересно? Интересна переменная data и ajaxurl. В переменной data есть параметр action. В качестве его значения указано имя функции, которое будет обрабатывать отправленный запрос. Параметр code - это идентификатор нашего счета.
Не маловажная переменная ajaxurl. Она предопределена в самом WordPress и содержит URL адрес, на который следует отправлять AJAX запрос, т.е. ее значение равно /wp-admin/admin-ajax.php.
Что не интересно - это jQuery. Мой скрипт почему-то упорно отказывается понимать знак доллара($), по этому пришлось его избегать.
Пара слов: первый параметр - это имя подключаемого скрипта(оно потребуется, если от него зависят другие скрипты); второй - это путь к JS файлу (WPLSPMS_PLUGIN_URL - это константа, которая содержит базовый путь к плагину); третий - это зависимости. Наш скрипт зависит от jquery.
Не маловажная переменная ajaxurl. Она предопределена в самом WordPress и содержит URL адрес, на который следует отправлять AJAX запрос, т.е. ее значение равно /wp-admin/admin-ajax.php.
Что не интересно - это jQuery. Мой скрипт почему-то упорно отказывается понимать знак доллара($), по этому пришлось его избегать.
Шаг 2. Добавление скрипта на страницу
Об этом так же особо заботиться не нужно. Разработчики WordPress максимально облегчили этот процесс. Нужно указать лишь одну строчку кода:wp_enqueue_script('wplspms_orders', WPLSPMS_PLUGIN_URL . '/assets/js/orders.js', array('jquery'));
Пара слов: первый параметр - это имя подключаемого скрипта(оно потребуется, если от него зависят другие скрипты); второй - это путь к JS файлу (WPLSPMS_PLUGIN_URL - это константа, которая содержит базовый путь к плагину); третий - это зависимости. Наш скрипт зависит от jquery.
Шаг 3. Добавляем обработчик
add_action('wp_ajax_wplspms_confirm_order', array(&$this, 'ajax_confirm_order'));
Здесь всего 2 параметра, но. считаю. что их стоит объяснить. Первый параметр - это обработчик AJAX запроса. Значение этого параметра составное и имеет определенную структуру. Событие AJAX запроса для админки должно начинаться на wp_ajax_. Вторая часть названия - это значение параметра action, которое мы передаем в POST запросе.
Второй параметр - непосредственно имя функции, которая будет обрабатывать этот запрос. Поскольку я использую объектно ориентированное программирование (ООП), то передается массив, первый элемент которого - указатель на класс, а второй - на имя функции. Другими словами это действие объявляется в конструкторе класса (отсюда &$this) и обрабатывать запрос будет функция ajax_confirm_order этого класса.
Тут нужно учесть 2 вещи: функция должна быть обязательно public, если используется ООП; второе - после выполнения функция должна умирать (die()).
В заключении скажу. что пользоваться "таким AJAX" очень и очень удобно. Спасибо разработчикам!
Второй параметр - непосредственно имя функции, которая будет обрабатывать этот запрос. Поскольку я использую объектно ориентированное программирование (ООП), то передается массив, первый элемент которого - указатель на класс, а второй - на имя функции. Другими словами это действие объявляется в конструкторе класса (отсюда &$this) и обрабатывать запрос будет функция ajax_confirm_order этого класса.
public function ajax_confirm_order() { if (isset($_POST['code']) && !empty($_POST['code'])) { $o = new wplspms_orders(); $res = $o->Confirm($_POST['code']); if ($res === false) { _e('Error', 'wplspms'); } else { echo $res; } die(); } }
Тут нужно учесть 2 вещи: функция должна быть обязательно public, если используется ООП; второе - после выполнения функция должна умирать (die()).
В заключении скажу. что пользоваться "таким AJAX" очень и очень удобно. Спасибо разработчикам!
Комментарии
Отправить комментарий