Há pouco que você pode fazer com o servidor do Silex que não pode ser feito através do Wordpress, mas é preciso um pouco de esforço para que o WP responda às chamadas do AJAX.
O primeiro passo é disponibilizar a chamada por meio do AJAX. Isto requer adicionar uma linha ao seu arquivo functions.php similar a
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');
Se essa chamada for feita para convidados e clientes (ou seja, não ADMIN), você também precisará da linha.
add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');
que faz a mesma coisa, mas é mais inclusivo.
O próximo passo é criar as chamadas ajax. Você não dá um exemplo de tal chamada, então tudo que posso fazer é aconselhá-lo a olhar para os documentos para $ wpdb . O WP tem um conjunto abrangente de chamadas para recuperar informações do banco de dados e para consultas complexas, você sempre pode usar o $ wpdb- & query () que executará SQL arbitrário para você.
A lógica do AJAX entra na função my_ajax_call () e o resultado deve ser colocado em uma matriz ou objeto. A linha final de sua função deve ser uma chamada para wp_send_json_success ($ return), onde $ return é o objeto / array de informações a serem retornadas.
Usando este sistema, eu pude adicionar páginas à seção wp_admin para permitir que os donos de lojas construíssem pedidos de reabastecimento a partir de dados do WooCommerce e uma galeria de side-load para variações (o Woo só permite uma galeria para o pai) .
Aqui está um exemplo rápido:
function my_ajax_call() {
$return['data'] = date('Y-m-d');
wp_send_json_success($return);
wp_die();
}
E, em seguida, no javascript, são necessárias mais etapas. Por um lado, você precisará do URL do WP AJAX, que geralmente é /wp-admin/admin-ajax.php
, mas pode variar um pouco. Muitas vezes é disponibilizado para JavaScript como o ajaxurl global ou pode estar escondido em outro objeto como woocommerce.ajaxurl
. Você precisará construir um objeto Javascript com um elemento de ação que aponte para sua função e quaisquer outras variáveis que você precise passar para a chamada AJAX. Por exemplo:
data = {'action':'my_ajax_call'}
ou
data = {'action':'my_ajax_call', 'todo':'getDate'}
(function($){
$.ajax{
url:ajaxurl,
data: data,
success: function(trn) {$('#data').html(trn.data)}
})(jQuery)
HTH