Es poco lo que puedes hacer con el servidor Silex que no se puede hacer a través de Wordpress, pero requiere un poco de esfuerzo para que WP responda a las llamadas de AJAX.
El primer paso es hacer que la llamada esté disponible a través de AJAX. Esto requiere agregar una línea a su archivo functions.php similar a
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');
si esta llamada se realizará para invitados y clientes (es decir, no ADMINISTRADOR), también necesitará la línea.
add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');
que hace lo mismo pero es más inclusivo.
El siguiente paso es crear las llamadas ajax. No da un ejemplo de tal llamada, así que todo lo que puedo hacer es recomendarle que busque en los documentos de $ wpdb . WP tiene un conjunto completo de llamadas para recuperar información de la base de datos y para consultas complejas, siempre puede usar $ wpdb- > query () que ejecutará SQL arbitrario para usted.
La lógica AJAX entra en la función my_ajax_call () y el resultado debe colocarse en una matriz u objeto. La línea final de su función debe ser una llamada a wp_send_json_success ($ return) donde $ return es el objeto / matriz de información que se devolverá.
Al usar este sistema, he podido agregar páginas a la sección wp_admin para permitir a los propietarios de tiendas crear pedidos de compra para la recuperación de datos de WooCommerce y una galería de carga lateral para variaciones (Woo solo permite una galería para el padre) .
Aquí hay un ejemplo rápido:
function my_ajax_call() {
$return['data'] = date('Y-m-d');
wp_send_json_success($return);
wp_die();
}
Y luego en el javascript, son necesarios más pasos. Por un lado, necesitará la URL WP AJAX, que generalmente es /wp-admin/admin-ajax.php
pero puede variar un poco. A menudo se pone a disposición de Javascript como el ajaxurl global o puede estar escondido en otro objeto como woocommerce.ajaxurl
. Necesitará construir un objeto Javascript con un elemento de acción que apunte a su función y cualquier otra variable que necesite pasar a la llamada AJAX. Por ejemplo:
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