uruchom silex lub slim z wordpress


10

Używam motywu na WordPress. W tym temacie wykonuję kilka wywołań AJAX, na które oczekuję odpowiedzi. ( http://example.com/capis/v0/packages/ )

Do obsługi połączeń powyżej HTTP używam silex jako serwera 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();

Używam php do uruchomienia serwera na porcie 8080, który obsługuje dane do wywołań ajax.

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

Teraz chcę obsługiwać te wywołania Ajax tylko przy użyciu WordPress. Nie chcę uruchamiać określonego serwera php.


Wydaje się, że to więcej pytań po stronie serwera. Jeśli chcesz zezwalać tylko na żądania z lokalnej instalacji WordPress, przypuszczam, że musisz skonfigurować serwer :)
Kolya Korobochkin,

8
Zdecydowanie polecam korzystanie z interfejsu API REST zamiast Silex.
kraftner

Oprócz interfejsu API REST wspomnianego przez @kraftner, możesz także zajrzeć do środowiska Themosis .
Fabian Marz


Możesz użyć interfejsu API WP-REST lub utworzyć niestandardowy interfejs API za pomocą akcji wp_ajax. oto oficjalny dokument
idpokute

Odpowiedzi:


1

Z serwerem Silex niewiele można zrobić, czego nie można zrobić za pomocą Wordpress, ale potrzeba trochę wysiłku, aby WP zareagował na wywołania AJAX.

Pierwszym krokiem jest udostępnienie połączenia za pośrednictwem AJAX. Wymaga to dodania wiersza do pliku functions.php podobnego do

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

jeśli to połączenie zostanie wykonane dla gości i klientów (tj. nie ADMIN), będziesz również potrzebować linii.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

który robi to samo, ale jest bardziej włączający.

Następnym krokiem jest utworzenie wywołań ajax. Nie podajesz przykładu takiego połączenia, więc wszystko, co mogę zrobić, to doradzić ci przejrzenie dokumentacji $ wpdb . WP ma kompleksowy zestaw wywołań do pobierania informacji z bazy danych i dla złożonych zapytań, zawsze możesz użyć $ wpdb-> query (), który uruchomi dla ciebie dowolny SQL.

Logika AJAX wchodzi w funkcję my_ajax_call (), a wynik powinien zostać umieszczony w tablicy lub obiekcie. Ostatnim wierszem funkcji powinno być wywołanie wp_send_json_success ($ return), gdzie $ return to obiekt / tablica informacji do zwrócenia.

Korzystając z tego systemu, byłem w stanie dodać strony do sekcji wp_admin, aby umożliwić właścicielom sklepów budowanie zamówień zakupu w celu uzupełnienia zapasów z danych WooCommerce i galerii pobrań dla odmian (Woo zezwala tylko na galerię dla rodzica).

Oto szybki przykład:

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

A potem w javascript potrzeba więcej kroków. Po pierwsze, potrzebujesz adresu URL WP AJAX, który zwykle jest, /wp-admin/admin-ajax.phpale może się nieco różnić. Jest często udostępniany Javascript jako globalny ajaxurl lub może być schowany w innym obiekcie, takim jak woocommerce.ajaxurl. Będziesz musiał zbudować obiekt JavaScript z elementem akcji, który wskazuje na twoją funkcję i wszelkie inne zmienne, które możesz potrzebować przekazać do wywołania AJAX. Na przykład:

data = {'action':'my_ajax_call'}

lub

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

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

HTH


W przypadku dalszych badań Wordpress i ajax mogę zasugerować przeczytanie artykułów stworzonych przez Toma McFarlina, on jest v.knowledgable o Wordpress i ma kilka dobrych postów na stronie konkretnie [ google.co.uk/…
virtualLast
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.