web-dev-qa-db-fra.com

lancez silex ou slim avec wordpress

Je cours un thème sur WordPress. Dans ce thème, je passe quelques AJAX appels auxquels j'attends une réponse. ( http://example.com/capis/v0/packages/ )

Pour servir au-dessus des appels http, 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 exécuter de serveur php spécifique.

10
Prashant Gaur

Avec le serveur Silex, vous ne pouvez pratiquement rien faire avec Wordpress, mais il faut 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 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 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 permettant de récupérer des informations dans la base de données. Pour les requêtes complexes, vous pouvez toujours utiliser $ wpdb-> query (), qui exécutera du code SQL arbitraire pour vous.

La logique AJAX entre 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 devrait être un appel à wp_send_json_success ($ return) où $ return est l’objet/le 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 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. Tout d'abord, 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 toutes les autres variables dont vous pourriez avoir besoin 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

1
Mark Cicchetti