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.php
như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