ใช้ silex หรือ slim ด้วย wordpress


10

ฉันใช้ธีมใน WordPress ในชุดรูปแบบนี้ฉันกำลังโทร AJAX ที่ฉันคาดหวังคำตอบ ( http://example.com/capis/v0/packages/ )

ในการให้บริการการโทร http ด้านบนฉันใช้ silex เป็นเซิร์ฟเวอร์ 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();

ฉันใช้ php เพื่อรันเซิร์ฟเวอร์บนพอร์ต 8080 ซึ่งให้บริการข้อมูลกับการโทร ajax

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

ตอนนี้ฉันต้องการรับใช้ Ajax เหล่านี้จากการใช้ WordPress เท่านั้น ฉันไม่ต้องการเรียกใช้เซิร์ฟเวอร์ php เฉพาะ


ดูเหมือนว่าคำถามฝั่งเซิร์ฟเวอร์เพิ่มเติม หากคุณต้องการให้มีเพียงการร้องขอจากการติดตั้ง WordPress ท้องถิ่นของคุณผมคิดว่าคุณต้องกำหนดค่าออกจากเซิร์ฟเวอร์ของคุณ :)
Kolya Korobochkin

8
ฉันอยากจะแนะนำให้ใช้REST APIแทน Silex
kraftner

นอกเหนือจาก REST API ที่กล่าวถึงโดย @kraftner คุณสามารถดูกรอบThemosis
Fabian Marz

สำหรับตัวอย่างสั้น ๆ ดูเช่นwordpress.stackexchange.com/questions/301493สำหรับฉันdeveloper.wordpress.org/rest-api/extending-the-rest-api/ ...... มีประโยชน์มาก
Clemens Tolboom

คุณสามารถใช้ WP-REST API หรือคุณสามารถสร้าง API แบบกำหนดเองโดยใช้การกระทำ wp_ajax นี่คือเอกสารอย่างเป็นทางการ
idpokute

คำตอบ:


1

มีเพียงเล็กน้อยที่คุณสามารถทำได้กับเซิร์ฟเวอร์ Silex ที่ไม่สามารถทำได้ผ่าน Wordpress แต่ใช้ความพยายามเล็กน้อยในการรับ WP เพื่อตอบสนองต่อการโทร AJAX

ขั้นตอนแรกคือการโทรผ่าน AJAX สิ่งนี้ต้องการเพิ่มบรรทัดในไฟล์ functions.php ของคุณซึ่งคล้ายกับ

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

หากมีการโทรนี้สำหรับแขกและลูกค้า (เช่นไม่ใช่ ADMIN) คุณจะต้องมีสาย

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

ซึ่งทำสิ่งเดียวกัน แต่รวมมากกว่า

ขั้นตอนต่อไปคือการสร้างการโทร ajax คุณไม่ให้เป็นตัวอย่างของการเรียกร้องดังกล่าวดังนั้นทั้งหมดที่ฉันสามารถทำได้คือการให้คำแนะนำให้คุณดูที่เอกสารสำหรับ$ wpdb WP มีชุดการเรียกที่ครอบคลุมสำหรับการดึงข้อมูลจากฐานข้อมูลและสำหรับการสืบค้นที่ซับซ้อนคุณสามารถใช้ $ wpdb-> query () ซึ่งจะเรียกใช้ SQL โดยอำเภอใจสำหรับคุณเสมอ

ตรรกะ AJAX ไปในฟังก์ชั่น my_ajax_call () และผลควรวางลงในอาร์เรย์หรือวัตถุ บรรทัดสุดท้ายของฟังก์ชั่นของคุณควรเป็นการเรียกไปยัง wp_send_json_success ($ return) โดยที่ $ return เป็นออบเจ็กต์ / อาร์เรย์ของข้อมูลที่จะถูกส่งกลับ

เมื่อใช้ระบบนี้ฉันสามารถเพิ่มหน้าลงในส่วน wp_admin เพื่อให้เจ้าของร้านค้าสามารถสร้างคำสั่งซื้อสำหรับการใส่ซ้ำจากข้อมูล WooCommerce และแกลเลอรีโหลดด้านข้างสำหรับรูปแบบต่างๆ (Woo อนุญาตเฉพาะแกลเลอรี่สำหรับผู้ปกครอง)

นี่คือตัวอย่างรวดเร็ว:

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

และในจาวาสคริปต์จำเป็นต้องมีขั้นตอนเพิ่มเติม สิ่งหนึ่งคุณจะต้องมี WP AJAX URL ซึ่งโดยปกติแล้วจะ/wp-admin/admin-ajax.phpแตกต่างกันบ้าง มันมักจะให้บริการแก่ Javascript เป็น ajaxurl woocommerce.ajaxurlทั่วโลกหรืออาจจะซุกอยู่ในวัตถุอื่นเช่น คุณจะต้องสร้างวัตถุ Javascript ด้วยองค์ประกอบการกระทำที่ชี้ไปที่ฟังก์ชันของคุณและตัวแปรอื่น ๆ ที่คุณอาจต้องส่งผ่านไปยังการโทร AJAX ตัวอย่างเช่น:

data = {'action':'my_ajax_call'}

หรือ

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

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

HTH


สำหรับการวิจัย wordpress และ ajax เพิ่มเติมฉันขอแนะนำให้อ่านบทความที่สร้างโดย Tom McFarlin เขาเป็น v.knowledgable เกี่ยวกับ wordpress และมีบทความที่ดีเกี่ยวกับ ajax โดยเฉพาะ [ google.co.uk/
......
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.