exécuter silex ou slim avec wordpress

10

J'utilise un thème sur WordPress. Dans ce thème, je passe des appels AJAX auxquels j'attends une réponse. ( enlace )

Pour servir les appels http ci-dessus, j'utilise silex comme serveur 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();

J'utilise php pour faire fonctionner un serveur sur le port 8080 qui sert des données aux appels ajax.

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

Maintenant, je veux servir ces appels Ajax en utilisant uniquement WordPress. Je ne veux pas utiliser de serveur php spécifique.

    
posée Prashant Gaur 26.08.2016 - 15:59

1 réponse

0

Vous ne pouvez pratiquement rien faire avec le serveur Silex avec Wordpress, mais il faut un peu d'effort pour amener WP à répondre aux appels AJAX.

La première étape consiste à rendre l'appel disponible via AJAX. Cela nécessite l'ajout d'une ligne à votre fichier functions.php similaire à

.
add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

Si cet appel doit être passé pour les invités et les clients (c'est-à-dire non pas ADMIN), vous aurez également besoin de la ligne.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

qui fait la même chose mais est plus inclusif.

L'étape suivante consiste à créer les appels ajax. Vous ne donnez pas d'exemple d'un tel appel, je ne peux donc que vous conseiller de consulter la documentation de $ wpdb WP dispose d’un ensemble complet d’appels pour extraire des informations de la base de données et pour les requêtes complexes, vous pouvez toujours utiliser $ wpdb- & query () qui exécutera du code SQL arbitraire pour vous.

La logique AJAX va dans la fonction my_ajax_call () et le résultat devrait être placé dans un tableau ou un objet. La dernière ligne de votre fonction devrait être un appel à wp_send_json_success ($ return) où $ return est l’objet / le tableau d’informations à renvoyer.

Grâce à ce système, j'ai pu ajouter des pages à la section wp_admin pour permettre aux propriétaires de boutique de créer des commandes d'achat pour le réapprovisionnement à partir de données WooCommerce et une galerie à chargement latéral pour les variantes (Woo n'autorise qu'une galerie pour le parent). .

Voici un exemple rapide:

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

Et puis dans le javascript, d'autres étapes sont nécessaires. D'une part, vous aurez besoin de l'URL WP AJAX, qui est généralement /wp-admin/admin-ajax.php mais peut varier quelque peu. Il est souvent mis à la disposition de Javascript comme ajaxurl global ou peut être caché dans un autre objet comme woocommerce.ajaxurl . Vous devrez construire un objet Javascript avec un élément d'action qui pointe vers votre fonction et sur toute autre variable nécessaire pour passer à l'appel AJAX. Par exemple:

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

    
réponse donnée Mark Cicchetti 27.08.2018 - 07:37

Lire d'autres questions sur les étiquettes