ejecute silex o slim con wordpress

10

Estoy ejecutando un tema en WordPress. En este tema, estoy haciendo algunas llamadas AJAX en las que estoy esperando alguna respuesta. ( enlace )

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 está sirviendo datos para llamadas ajax.

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

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

    
pregunta Prashant Gaur 26.08.2016 - 15:59

1 respuesta

0

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

    
respondido por el Mark Cicchetti 27.08.2018 - 07:37

Lea otras preguntas en las etiquetas