eseguire silex o dimagrire con wordpress


10

Sto eseguendo un tema su WordPress. In questo tema, sto effettuando alcune chiamate AJAX in cui mi aspetto una risposta. ( http://example.com/capis/v0/packages/ )

Per servire sopra le chiamate http sto usando silex come server 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();

Sto usando php per eseguire un server sulla porta 8080 che sta servendo i dati per le chiamate Ajax.

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

Ora voglio servire queste chiamate Ajax usando solo WordPress. Non voglio eseguire un server php specifico.


Sembra una domanda più sul lato server. Se si desidera consentire solo le richieste dall'installazione locale di WordPress, suppongo che sia necessario configurare il server :)
Kolya Korobochkin,

8
Consiglio vivamente di utilizzare l' API REST invece di Silex.
Kraftner,

Oltre all'API REST menzionata da @kraftner, puoi anche dare un'occhiata al framework Themosis .
Fabian Marz,


È possibile utilizzare l'API WP-REST oppure creare un'API personalizzata utilizzando l'azione wp_ajax. ecco il documento ufficiale
idpokute del

Risposte:


1

C'è poco che puoi fare con il server Silex che non può essere fatto tramite Wordpress ma ci vuole un po 'di sforzo per far sì che WP risponda alle chiamate AJAX.

Il primo passo è rendere disponibile la chiamata tramite AJAX. Ciò richiede l'aggiunta di una riga al file Functions.php simile a

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

se questa chiamata verrà effettuata per ospiti e clienti (cioè non ADMIN), avrai bisogno anche della linea.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

che fa la stessa cosa ma è più inclusivo.

Il prossimo passo è creare le chiamate Ajax. Non fai un esempio di tale chiamata, quindi tutto ciò che posso fare è consigliarti di consultare i documenti per $ wpdb . WP ha un set completo di chiamate per recuperare informazioni dal database e per query complesse, puoi sempre usare $ wpdb-> query () che eseguirà SQL arbitrario per te.

La logica AJAX va nella funzione my_ajax_call () e il risultato deve essere inserito in un array o in un oggetto. L'ultima riga della funzione dovrebbe essere una chiamata a wp_send_json_success ($ return) dove $ return è l'oggetto / matrice di informazioni da restituire.

Utilizzando questo sistema, sono stato in grado di aggiungere pagine alla sezione wp_admin per consentire ai proprietari di negozi di creare ordini di acquisto per il riassortimento dai dati di WooCommerce e una galleria a caricamento laterale per le varianti (Woo consente solo una galleria per il genitore).

Ecco un breve esempio:

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

E poi nel javascript, sono necessari più passaggi. Per prima cosa, avrai bisogno dell'URL WP AJAX che di solito è /wp-admin/admin-ajax.phpma può variare leggermente. È spesso reso disponibile a Javascript come ajaxurl globale o potrebbe essere nascosto in un altro oggetto come woocommerce.ajaxurl. Dovrai costruire un oggetto Javascript con un elemento di azione che punti alla tua funzione e qualsiasi altra variabile che potresti dover passare alla chiamata AJAX. Per esempio:

data = {'action':'my_ajax_call'}

o

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

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

HTH


Per ulteriori ricerche su wordpress e ajax, posso suggerire di leggere gli articoli creati da Tom McFarlin, è ben informato su wordpress e ha dei buoni post su ajax in particolare [ google.co.uk/…
virtualLast
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.