Z serwerem Silex niewiele można zrobić, czego nie można zrobić za pomocą Wordpress, ale potrzeba trochę wysiłku, aby WP zareagował na wywołania AJAX.
Pierwszym krokiem jest udostępnienie połączenia za pośrednictwem AJAX. Wymaga to dodania wiersza do pliku functions.php podobnego do
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');
jeśli to połączenie zostanie wykonane dla gości i klientów (tj. nie ADMIN), będziesz również potrzebować linii.
add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');
który robi to samo, ale jest bardziej włączający.
Następnym krokiem jest utworzenie wywołań ajax. Nie podajesz przykładu takiego połączenia, więc wszystko, co mogę zrobić, to doradzić ci przejrzenie dokumentacji $ wpdb . WP ma kompleksowy zestaw wywołań do pobierania informacji z bazy danych i dla złożonych zapytań, zawsze możesz użyć $ wpdb-> query (), który uruchomi dla ciebie dowolny SQL.
Logika AJAX wchodzi w funkcję my_ajax_call (), a wynik powinien zostać umieszczony w tablicy lub obiekcie. Ostatnim wierszem funkcji powinno być wywołanie wp_send_json_success ($ return), gdzie $ return to obiekt / tablica informacji do zwrócenia.
Korzystając z tego systemu, byłem w stanie dodać strony do sekcji wp_admin, aby umożliwić właścicielom sklepów budowanie zamówień zakupu w celu uzupełnienia zapasów z danych WooCommerce i galerii pobrań dla odmian (Woo zezwala tylko na galerię dla rodzica).
Oto szybki przykład:
function my_ajax_call() {
$return['data'] = date('Y-m-d');
wp_send_json_success($return);
wp_die();
}
A potem w javascript potrzeba więcej kroków. Po pierwsze, potrzebujesz adresu URL WP AJAX, który zwykle jest, /wp-admin/admin-ajax.php
ale może się nieco różnić. Jest często udostępniany Javascript jako globalny ajaxurl lub może być schowany w innym obiekcie, takim jak woocommerce.ajaxurl
. Będziesz musiał zbudować obiekt JavaScript z elementem akcji, który wskazuje na twoją funkcję i wszelkie inne zmienne, które możesz potrzebować przekazać do wywołania AJAX. Na przykład:
data = {'action':'my_ajax_call'}
lub
data = {'action':'my_ajax_call', 'todo':'getDate'}
(function($){
$.ajax{
url:ajaxurl,
data: data,
success: function(trn) {$('#data').html(trn.data)}
})(jQuery)
HTH