wordpress ile silex veya slim çalıştırın


10

WordPress üzerinde bir tema çalıştırıyorum. Bu temada, bazı yanıt beklediğim bazı AJAX çağrıları yapıyorum. ( http://example.com/capis/v0/packages/ )

Http aramalarının üstünde hizmet vermek için http sunucusu olarak silex kullanıyorum.

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

Ben ajax aramaları veri sunan 8080 bağlantı noktasında bir sunucu çalıştırmak için php kullanıyorum.

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

Şimdi bu Ajax çağrılarını sadece WordPress kullanarak sunmak istiyorum. Belirli bir php sunucusu çalıştırmak istemiyorum.


Daha fazla sunucu tarafı sorusu gibi görünüyor. Yalnızca yerel WordPress kurulumunuzdan gelen isteklere izin vermek istiyorsanız, sunucunuzu yapılandırmanız gerektiğini varsayalım :)
Kolya Korobochkin

8
Silex yerine REST API kullanmanızı şiddetle tavsiye ederim .
kraftner

@Kraftner tarafından belirtilen REST API'sinin yanı sıra, Themosis çerçevesine de göz atabilirsiniz .
Fabian Marz


WP-REST API'sini kullanabilir veya wp_ajax eylemini kullanarak özel API yapabilirsiniz. İşte resmi doc
idpokute

Yanıtlar:


1

Wordpress aracılığıyla yapılamayan Silex sunucusuyla yapabileceğiniz çok az şey var, ancak WP'nin AJAX çağrılarına yanıt vermesi biraz çaba gerektiriyor.

İlk adım, aramayı AJAX üzerinden kullanılabilir hale getirmektir. Bunun için function.php dosyasına benzer bir satır eklemeniz gerekir

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

bu çağrı konuklar ve müşteriler için yapılacaksa (örn. ADMIN değil), hatta telefon hattına da ihtiyacınız olacaktır.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

aynı şeyi yapar ama daha kapsayıcıdır.

Bir sonraki adım ajax çağrıları oluşturmaktır. Böyle bir çağrıya örnek vermiyorsunuz, bu yüzden yapabileceğim tek şey $ wpdb için dokümanlara bakmanızı tavsiye etmek . WP, veritabanından bilgi almak ve karmaşık sorgular için kapsamlı bir çağrı setine sahiptir, her zaman sizin için rastgele SQL çalıştıracak $ wpdb-> query () kullanabilirsiniz.

AJAX mantığı my_ajax_call () fonksiyonuna gider ve sonuç bir diziye veya nesneye yerleştirilmelidir. İşlevinizin son satırı, $ return döndürülecek nesne / dizi olan wp_send_json_success ($ return) çağrısı olmalıdır.

Bu sistemi kullanarak, mağaza sahiplerinin WooCommerce verilerinden yeniden stoklamak için satınalma siparişleri ve varyasyonlar için bir yan yük galerisi oluşturmalarına izin vermek için wp_admin bölümüne sayfa ekleyebildim (Woo, yalnızca üst öğe için bir galeriye izin verir).

İşte kısa bir örnek:

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

Ve sonra javascript'te daha fazla adım gerekli. Bir kere, WP AJAX URL'sine ihtiyacınız olacak, /wp-admin/admin-ajax.phpancak genellikle biraz değişebilir. Genellikle Javascript için global ajaxurl olarak kullanılabilir veya benzer bir nesneye sıkışmış olabilir woocommerce.ajaxurl. İşlevinizi ve AJAX çağrısına iletmeniz gereken diğer değişkenleri gösteren bir eylem öğesiyle bir Javascript nesnesi oluşturmanız gerekir. Örneğin:

data = {'action':'my_ajax_call'}

veya

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

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

HTH


Daha fazla wordpress ve ajax araştırması için Tom McFarlin tarafından oluşturulan makaleleri okumayı önerebilirim, o wordpress hakkında v.knowledgable ve özellikle ajax hakkında bazı iyi yayınları var [ google.co.uk/…
virtualLast
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.