courir silex ou slim avec wordpress

10

J'utilise un thème sur WordPress. Dans ce thème, je fais des appels AJAX où j'attends une réponse. ( http://example.com/capis/v0/packages/ )

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 exécuter 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 exécuter de serveur php spécifique.

Prashant
la source
On dirait plus de questions côté serveur. Si vous souhaitez autoriser uniquement les demandes de votre installation WordPress locale, je suppose que vous devez configurer votre serveur :)
Kolya Korobochkin
8
Je recommanderais fortement d'utiliser l' API REST au lieu de Silex.
kraftner
Outre l'API REST mentionnée par @kraftner, vous pouvez également jeter un œil au framework Themosis .
Fabian Marz
Pour un court exemple, voir ie wordpress.stackexchange.com/questions/301493 Pour moi developer.wordpress.org/rest-api/extending-the-rest-api/… a été très utile.
Clemens Tolboom
Vous pouvez utiliser l'API WP-REST ou créer une API personnalisée à l'aide de l'action wp_ajax. voici le doc officiel
idpokute

Réponses:

1

Il n'y a pas grand-chose que vous puissiez faire avec le serveur Silex qui ne peut pas être fait via Wordpress mais cela demande un peu d'effort pour que WP réponde aux appels AJAX.

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

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

si cet appel sera fait pour les invités et les clients (c'est-à-dire 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, donc tout ce que je peux faire est de vous conseiller de consulter la documentation de $ wpdb . WP a un ensemble complet d'appels pour récupérer des informations de la base de données et pour les requêtes complexes, vous pouvez toujours utiliser $ wpdb-> query () qui exécutera du SQL arbitraire pour vous.

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

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

Voici un petit exemple:

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.phpmais 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 toutes les autres variables que vous pourriez avoir besoin de 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

Mark Cicchetti
la source
Pour certains wordpress plus loin et la recherche ajax puis - je suggérer d' avoir une lecture des articles créés par Tom McFarlin, il est v.knowledgable au sujet et a quelques wordpress bons messages sur ajax spécifiquement [ google.co.uk/...
virtualLast