Технологія Ajax (Asynchronous JavaScript And XML) дозволяє отримувати дані з сервера без перезавантаження всієї сторінки. Без сумніву, це дуже зручно! Навіть існують спеціальні плагіни (наприклад, AJAX for all), що дозволять кожну сторінку завантажувати з допомогою цієї технології. Тема ж цієї статті – вибіркове застосування Ajax у WordPress: як правильно це зробити?
На загал, існує три стадії роботи Ajax запиту:
Важливе значення тут має скрипт на сервері, що обробляє запит. Потрібна зручна і кросс-браузерна бібліотека. На щастя, WordPress використовує саме таку – SACK (Simple Ajax Code-Kit) – і вона вже вбудована у двигунець. Ця бібліотека знаходиться за адресою: wp-admin/admin-ajax.php
. Отже, дуже важливо, щоб запит надсилався саме до цього файла!. Інакше, ваш запит взагалі не буде оброблятись двигунцем. Він його просто ігноруватиме.
Починаючи з WordPress версії 2.8 створено новий хук ‘wp_ajax_назва_дії’ і ‘wp_ajax_nopriv_назва_дії’. Перший діє для авторизованих користувачів, другий – для гостей. Дані хуки дозволять вам прив’язати певний Ajax-запит до певної php-функції.
add_action('wp_ajax_назва_дії', 'функція_що_спрацьовує_при_цьому');
add_action('wp_ajax_nopriv_назва_дії', 'функція_що_спрацьовує_при_цьому');
Власне, це основне що потрібно знати для організації правильної роботи Ajax у WordPress для фроент-енд. Далі ще наведу простий приклад для наочності.
У нас є випадаюче меню з двома батьківськими категоріями: “новини” та “спорт”. Категорія “новини” немає дочірних категорій, а новина “спорт” – має. При виборі користувачем батьківської категорії “спорт” нижче з’явиться ще одне випадаюче меню, що міститиме дочірні її категорії.
Нижче наведено повний код. Приклад реалізовано на jQuery, отож спершу вам знадобиться долучити дану бібліотеку на веб сторінку. Найшвидше це можна зробити з допомогою сервісу Gogle Code.
Долучаємо бібліотеку jQuery:
Випадаючі меню:
jQuery скрипт – спрацьовує на дію, створює і надсилає запит з допомогою Ajax:
PHP функція і хуки (повинні міститись у файлі functions.php
):
function implement_ajax() {
if(isset($_POST['catid'])){
$categories = get_categories('child_of='.$_POST['catid'].'&hide_empty=0');
echo '';
die();
}
}
add_action('wp_ajax_my_special_ajax_call', 'implement_ajax');
add_action('wp_ajax_nopriv_my_special_ajax_call', 'implement_ajax');
Коментування вимкнено.
Привіт. Збільши розмір шрифту теми. Незручно читати малі літери.
Знак долара «$» не рекомендовано використовувати, оскільки можуть бути проблеми із іншими скриптами. Бажано використовувати «jQuery» замість знака долара.
Не розумію для чого підвантажувати сторонню бібліотеку jQuery, якщо можна використати її з адмінки. Чи вона не підходить для аяксу?
Так, збільшив.
Ти правий. Але допис не про те, як використовати jQuery у не конфліктному режимі. Неможливо розповісти про всі подібні нюанси. Інакше вийде трактат. 🙂
Бібліотеки різняться тільки версіями. Я використовую метод який описав лише для того, щоб бути впевненим у тому, яку саме версію я долучаю.
Помилки у вас в коді явасріпта. Кинулось у очі.
У стрічках
action: ‘my_special_ajax_call’, // назва action’a, при якому спрацьовує php
catid: main_category // значення перемінної, що треба передати
аction та catid мають бути в лапках, так як це ключі об’єкту, а не змінні.
Можливо таке написання не канонічне. Але воно практичне, не викликає помилок і нормально обробляється.