Führen Sie Silex oder Slim mit WordPress aus

10

Ich verwende ein Thema in WordPress. In diesem Thema mache ich einige AJAX-Anrufe, bei denen ich eine Antwort erwarte. ( http://example.com/capis/v0/packages/ )

Um über http-Aufrufen zu dienen, verwende ich silex als http-Server.

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();

Ich verwende PHP, um einen Server am 8080-Port auszuführen, der Daten für Ajax-Anrufe bereitstellt.

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

Jetzt möchte ich diese Ajax-Anrufe nur mit WordPress bedienen. Ich möchte keinen bestimmten PHP-Server ausführen.

Prashant
quelle
Scheint eher eine serverseitige Frage zu sein. Wenn Sie nur Anfragen von Ihrer lokalen WordPress-Installation zulassen möchten, müssen Sie
wahrscheinlich
8
Ich würde die Verwendung der REST-API anstelle von Silex sehr empfehlen .
Kraftner
Neben der von @kraftner erwähnten REST-API können Sie auch einen Blick in das Themosis- Framework werfen .
Fabian Marz
Ein kurzes Beispiel finden Sie unter wordpress.stackexchange.com/questions/301493. Für mich war developer.wordpress.org/rest-api/extending-the-rest-api/… sehr nützlich.
Clemens Tolboom
Sie können die WP-REST-API verwenden oder mithilfe der Aktion wp_ajax eine benutzerdefinierte API erstellen. hier ist offizielles doc
idpokute

Antworten:

1

Mit dem Silex-Server können Sie nur wenig tun, was nicht über Wordpress möglich ist. Es ist jedoch ein wenig mühsam, WP dazu zu bringen, auf AJAX-Anrufe zu antworten.

Der erste Schritt besteht darin, den Anruf über AJAX verfügbar zu machen. Dies erfordert das Hinzufügen einer Zeile zu Ihrer Datei functions.php, ähnlich wie

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

Wenn dieser Anruf für Gäste und Kunden (dh nicht für ADMIN) getätigt wird, benötigen Sie auch die Leitung.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

das macht das gleiche, ist aber integrativer.

Der nächste Schritt besteht darin, die Ajax-Aufrufe zu erstellen. Sie geben kein Beispiel für einen solchen Aufruf an, daher kann ich Ihnen nur raten, in den Dokumenten nach $ wpdb zu suchen . WP verfügt über eine umfassende Reihe von Aufrufen zum Abrufen von Informationen aus der Datenbank. Für komplexe Abfragen können Sie jederzeit $ wpdb-> query () verwenden, um beliebiges SQL für Sie auszuführen.

Die AJAX-Logik geht in die Funktion my_ajax_call () und das Ergebnis sollte in ein Array oder Objekt eingefügt werden. Die letzte Zeile Ihrer Funktion sollte ein Aufruf von wp_send_json_success ($ return) sein, wobei $ return das Objekt / Array von Informationen ist, das zurückgegeben werden soll.

Mit diesem System konnte ich dem Abschnitt wp_admin Seiten hinzufügen, damit Ladenbesitzer Bestellungen für die Wiederauffüllung von WooCommerce-Daten und eine Seitenladegalerie für Variationen erstellen können (Woo erlaubt nur eine Galerie für die Eltern).

Hier ist ein kurzes Beispiel:

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

Und dann sind im Javascript weitere Schritte erforderlich. Zum einen benötigen Sie die WP AJAX-URL, die normalerweise /wp-admin/admin-ajax.phpaber etwas variieren kann. Es wird Javascript oft als globales Ajaxurl zur Verfügung gestellt oder kann in einem anderen Objekt wie versteckt sein woocommerce.ajaxurl. Sie müssen ein Javascript-Objekt mit einem Aktionselement erstellen, das auf Ihre Funktion und alle anderen Variablen verweist, die Sie möglicherweise an den AJAX-Aufruf übergeben müssen. Beispielsweise:

data = {'action':'my_ajax_call'}

oder

data = {'action':'my_ajax_call', 'todo':'getDate'}

(function($){
    $.ajax{
        url:ajaxurl,
        data: data,
        success: function(trn) {$('#data').html(trn.data)}
})(jQuery)

HTH

Mark Cicchetti
quelle
Für weitere WordPress- und Ajax-Recherchen kann ich vorschlagen, die Artikel von Tom McFarlin zu lesen. Er kennt sich mit WordPress sehr gut aus und hat einige gute Beiträge zu Ajax speziell [ google.co.uk/…
virtualLast