Мало що можна зробити з сервером Silex, що неможливо зробити за допомогою Wordpress, але потрібно трохи зусиль, щоб WP відповідав на дзвінки AJAX.
Перший крок - зробити доступ до дзвінка через AJAX. Для цього потрібно додати рядок до файлу function.php, подібного до
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');
якщо цей дзвінок буде здійснено для гостей та клієнтів (тобто не ADMIN), вам також знадобиться лінія.
add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');
що робить те саме, але є всеосяжнішим.
Наступним кроком є створення дзвінків ajax. Ви не наводите приклад такого дзвінка, тому все, що я можу зробити, - це порадити вам переглянути документи за $ wpdb . WP має вичерпний набір викликів для отримання інформації з бази даних та для складних запитів, ви завжди можете використовувати $ wpdb-> query (), який запустить довільний SQL для вас.
Логіка AJAX входить у функцію my_ajax_call (), і результат повинен бути розміщений у масиві чи об'єкті. Останнім рядком вашої функції повинен бути виклик до wp_send_json_success ($ return), де $ return є об'єктом / масивом інформації, яку потрібно повернути.
Використовуючи цю систему, я зміг додати сторінки до розділу wp_admin, щоб дозволити власникам магазинів створювати замовлення на купівлю для відновлення даних WooCommerce та галерею бічних завантажень для варіацій (Woo дозволяє лише галерею для батьків).
Ось короткий приклад:
function my_ajax_call() {
$return['data'] = date('Y-m-d');
wp_send_json_success($return);
wp_die();
}
І тоді в javascript потрібно більше кроків. З одного боку, вам знадобиться URL-адреса WP AJAX, яка зазвичай, /wp-admin/admin-ajax.php
але може дещо відрізнятися. Часто він стає доступним для Javascript як глобальний ajaxurl або може бути схований на інший об'єкт, як-от woocommerce.ajaxurl
. Вам знадобиться побудувати об’єкт Javascript з елементом дії, який вказує на вашу функцію та будь-які інші змінні, які, можливо, знадобляться для виклику AJAX. Наприклад:
data = {'action':'my_ajax_call'}
або
data = {'action':'my_ajax_call', 'todo':'getDate'}
(function($){
$.ajax{
url:ajaxurl,
data: data,
success: function(trn) {$('#data').html(trn.data)}
})(jQuery)
HTH