ejecutar silex o slim con wordpress


10

Estoy ejecutando un tema en WordPress. En este tema, estoy haciendo algunas llamadas AJAX donde espero alguna respuesta. ( http://example.com/capis/v0/packages/ )

Para atender las llamadas http anteriores, estoy usando 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();

Estoy usando php para ejecutar un servidor en el puerto 8080 que sirve datos a llamadas ajax.

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

Ahora quiero atender estas llamadas Ajax usando WordPress solamente. No quiero ejecutar un servidor php específico.


Parece una pregunta más del lado del servidor. Si desea permitir solo solicitudes de su instalación local de WordPress, supongo que necesita configurar su servidor :)
Kolya Korobochkin

8
Recomiendo encarecidamente utilizar la API REST en lugar de Silex.
kraftner

Además de la API REST mencionada por @kraftner, también puede echar un vistazo al marco Themosis .
Fabian Marz


Puede usar la API WP-REST o puede hacer una API personalizada utilizando la acción wp_ajax. aquí está el documento oficial
idpokute

Respuestas:


1

Hay poco que pueda hacer con el servidor Silex que no se puede hacer a través de Wordpress, pero se necesita un poco de esfuerzo para que WP responda a las llamadas 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 para ADMIN), 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 aconsejarle que mire los documentos por $ 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 va 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 / conjunto de información que se devolverá.

Usando este sistema, he podido agregar páginas a la sección wp_admin para permitir a los dueños de tiendas crear órdenes de compra para reabastecerse 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 JavaScript, son necesarios más pasos. Por un lado, necesitará la URL WP AJAX, que generalmente es /wp-admin/admin-ajax.phppero puede variar un poco. A menudo está disponible para Javascript como ajaxurl global o puede estar escondido en otro objeto como woocommerce.ajaxurl. Deberá construir un objeto Javascript con un elemento de acción que apunte a su función y a 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


Para un poco más de investigación sobre wordpress y ajax, puedo sugerir que lean los artículos creados por Tom McFarlin, es muy conocedor de wordpress y tiene algunas buenas publicaciones en ajax específicamente [ google.co.uk/…
virtualLast
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.