chạy silex hoặc mỏng với wordpress


10

Tôi đang chạy một chủ đề trên WordPress. Trong chủ đề này, tôi đang thực hiện một số cuộc gọi AJAX nơi tôi đang mong đợi một số phản hồi. ( http://example.com/capis/v0/packages/ )

Để phục vụ các cuộc gọi http trên, tôi đang sử dụng silex làm máy chủ 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();

Tôi đang sử dụng php để chạy một máy chủ trên cổng 8080 đang phục vụ dữ liệu cho các cuộc gọi ajax.

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

Bây giờ tôi muốn chỉ phục vụ các cuộc gọi Ajax này bằng cách sử dụng WordPress. Tôi không muốn chạy máy chủ php cụ thể.


Có vẻ như câu hỏi phía máy chủ nhiều hơn. Nếu bạn muốn chỉ cho phép các yêu cầu từ cài đặt WordPress cục bộ của tôi, tôi cho rằng bạn cần phải định cấu hình máy chủ của mình :)
Kolya Korobochkin 13/03/2017

8
Tôi thực sự khuyên bạn nên sử dụng API REST thay vì Silex.
kraftner

Bên cạnh API REST được đề cập bởi @kraftner, bạn cũng có thể xem xét khuôn khổ Themosis .
Fabian Marz

Để biết một ví dụ ngắn, hãy xem ví dụ wordpress.stackexchange.com/questions/301493 Đối với tôi developer.wordpress.org/rest-api/extending-the-rest-api/ Lỗi rất hữu ích.
Clemens Tolboom

Bạn có thể sử dụng API WP-REST hoặc bạn có thể tạo API tùy chỉnh bằng hành động wp_ajax. đây là tài liệu chính thức
idpokute

Câu trả lời:


1

Có rất ít điều bạn có thể làm với máy chủ Silex không thể thực hiện được thông qua Wordpress nhưng phải mất một chút nỗ lực để WP trả lời các cuộc gọi AJAX.

Bước đầu tiên là thực hiện cuộc gọi thông qua AJAX. Điều này yêu cầu thêm một dòng vào tệp tin.php của bạn tương tự như

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

nếu cuộc gọi này sẽ được thực hiện cho khách và khách hàng (không phải ADMIN), bạn cũng sẽ cần đường dây.

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

mà làm điều tương tự nhưng bao gồm nhiều hơn.

Bước tiếp theo là tạo các cuộc gọi ajax. Bạn không đưa ra một ví dụ về một cuộc gọi như vậy vì vậy tất cả những gì tôi có thể làm là khuyên bạn nên xem các tài liệu cho $ wpdb . WP có một tập hợp toàn diện các lệnh gọi để lấy thông tin từ cơ sở dữ liệu và đối với các truy vấn phức tạp, bạn luôn có thể sử dụng $ wpdb-> query () sẽ chạy SQL tùy ý cho bạn.

Logic AJAX đi vào hàm my_ajax_call () và kết quả sẽ được đặt vào một mảng hoặc đối tượng. Dòng cuối cùng của hàm của bạn phải là một lệnh gọi đến wp_send_json_success ($ return) trong đó $ return là đối tượng / mảng thông tin được trả về.

Sử dụng hệ thống này, tôi đã có thể thêm các trang vào phần wp_admin để cho phép chủ cửa hàng xây dựng đơn đặt hàng mua lại từ dữ liệu WooC Commerce và thư viện phụ tải cho các biến thể (Woo chỉ cho phép một thư viện cho phụ huynh).

Đây là một ví dụ nhanh:

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

Và sau đó trong javascript, cần nhiều bước hơn. Đối với một điều, bạn sẽ cần URL WP AJAX thường /wp-admin/admin-ajax.phpnhưng có thể thay đổi phần nào. Nó thường được cung cấp cho Javascript dưới dạng ajaxurl toàn cầu hoặc có thể được giấu trong một đối tượng khác như woocommerce.ajaxurl. Bạn sẽ cần xây dựng một đối tượng Javascript có thành phần hành động trỏ đến chức năng của bạn và bất kỳ biến nào khác mà bạn có thể cần chuyển đến lệnh gọi AJAX. Ví dụ:

data = {'action':'my_ajax_call'}

hoặc là

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

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

HTH


Đối với một số nghiên cứu về wordpress và ajax, tôi có thể đề nghị đọc các bài báo được tạo bởi Tom McFarlin, anh ấy v.ledgeledgable về wordpress và có một số bài viết hay trên ajax cụ thể [ google.co.uk/
tựa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.