С сервером Silex мало что можно сделать с помощью Wordpress, но требуется немного усилий, чтобы заставить WP отвечать на вызовы AJAX.
Первый шаг - сделать звонок доступным через AJAX. Это требует добавления строки в ваш файл functions.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 с элементом action, который указывает на вашу функцию и любые другие переменные, которые вам может понадобиться передать в вызов 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)
НТН