C'è poco che puoi fare con il server Silex che non può essere fatto tramite Wordpress ma ci vuole un po 'di sforzo per far sì che WP risponda alle chiamate AJAX.
Il primo passo è rendere disponibile la chiamata tramite AJAX. Ciò richiede l'aggiunta di una riga al file Functions.php simile a
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');
se questa chiamata verrà effettuata per ospiti e clienti (cioè non ADMIN), avrai bisogno anche della linea.
add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');
che fa la stessa cosa ma è più inclusivo.
Il prossimo passo è creare le chiamate Ajax. Non fai un esempio di tale chiamata, quindi tutto ciò che posso fare è consigliarti di consultare i documenti per $ wpdb . WP ha un set completo di chiamate per recuperare informazioni dal database e per query complesse, puoi sempre usare $ wpdb-> query () che eseguirà SQL arbitrario per te.
La logica AJAX va nella funzione my_ajax_call () e il risultato deve essere inserito in un array o in un oggetto. L'ultima riga della funzione dovrebbe essere una chiamata a wp_send_json_success ($ return) dove $ return è l'oggetto / matrice di informazioni da restituire.
Utilizzando questo sistema, sono stato in grado di aggiungere pagine alla sezione wp_admin per consentire ai proprietari di negozi di creare ordini di acquisto per il riassortimento dai dati di WooCommerce e una galleria a caricamento laterale per le varianti (Woo consente solo una galleria per il genitore).
Ecco un breve esempio:
function my_ajax_call() {
$return['data'] = date('Y-m-d');
wp_send_json_success($return);
wp_die();
}
E poi nel javascript, sono necessari più passaggi. Per prima cosa, avrai bisogno dell'URL WP AJAX che di solito è /wp-admin/admin-ajax.php
ma può variare leggermente. È spesso reso disponibile a Javascript come ajaxurl globale o potrebbe essere nascosto in un altro oggetto come woocommerce.ajaxurl
. Dovrai costruire un oggetto Javascript con un elemento di azione che punti alla tua funzione e qualsiasi altra variabile che potresti dover passare alla chiamata AJAX. Per esempio:
data = {'action':'my_ajax_call'}
o
data = {'action':'my_ajax_call', 'todo':'getDate'}
(function($){
$.ajax{
url:ajaxurl,
data: data,
success: function(trn) {$('#data').html(trn.data)}
})(jQuery)
HTH