execute silex ou slim com wordpress


10

Estou executando um tema no WordPress. Neste tema, estou fazendo algumas chamadas AJAX, onde estou esperando alguma resposta. ( http://example.com/capis/v0/packages/ )

Para atender as chamadas http acima, estou usando o silex como servidor http.

index.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Silex\Application;

$app = new Silex\Application();

$app->POST('/capis/v0/packages/', function(Application $app, Request $request) {
            # logic            
            return new Response('HELLO');
            });
$app->run();

Estou usando o php para executar um servidor na porta 8080 que está servindo dados para chamadas ajax.

php -S localhost:8080 -t web web/index.php

Agora, desejo atender a essas chamadas do Ajax usando apenas o WordPress. Eu não quero executar um servidor php específico.


Parece mais uma pergunta do lado do servidor. Se você quiser permitir que apenas os pedidos de sua instalação WordPress local, eu suponho que você precisa configurar o seu servidor :)
Kolya Korobochkin

8
Eu recomendo o uso da API REST em vez do Silex.
Kraftner

Além da API REST mencionada pelo @kraftner, você também pode dar uma olhada na estrutura Themosis .
Fabian Marz


Você pode usar a API WP-REST ou criar uma API personalizada usando a ação wp_ajax. aqui é o doc oficial
idpokute

Respostas:


1

Há pouco que você pode fazer com o servidor 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 AJAX.

O primeiro passo é disponibilizar a chamada pelo AJAX. Isso requer adicionar uma linha ao seu arquivo functions.php semelhante ao

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

se essa ligação for feita para convidados e clientes (por exemplo, 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 dessa ligação, então tudo o que posso fazer é aconselhá-lo a procurar os documentos para $ wpdb . O WP possui um conjunto abrangente de chamadas para recuperar informações do banco de dados e para consultas complexas, você sempre pode usar $ 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 da sua função deve ser uma chamada para wp_send_json_success ($ return) em que $ return é o objeto / matriz de informações a serem retornadas.

Usando esse sistema, pude adicionar páginas à seção wp_admin para permitir que os lojistas construam pedidos de reposição para reposição de dados do WooCommerce e uma galeria de carregamento lateral para variações (o Woo permite apenas uma galeria para os pais).

Aqui está um exemplo rápido:

function my_ajax_call() {
    $return['data'] = date('Y-m-d');
    wp_send_json_success($return);
    wp_die();
}

E então no javascript, são necessárias mais etapas. Por um lado, você precisará da URL WP AJAX, que geralmente é, /wp-admin/admin-ajax.phpmas pode variar um pouco. Muitas vezes, é disponibilizado ao 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 possam precisar 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


Para alguns mais wordpress e pesquisa ajax posso sugerir ter uma leitura dos artigos criados por Tom McFarlin, ele é v.knowledgable sobre wordpress e tem algumas boas mensagens sobre ajax especificamente [ google.co.uk/...
virtualLast
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.