запустить 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, я полагаю, вам нужно настроить свой сервер :)
Коля Коробочкин

8
Я настоятельно рекомендую использовать REST API вместо Silex.
kraftner

Помимо REST API, упомянутого @kraftner, вы также можете взглянуть на платформу Themosis .
Фабианский марз

Для краткого примера смотрите ie wordpress.stackexchange.com/questions/301493 Для меня developer.wordpress.org/rest-api/extending-the-rest-api/… было очень полезно.
Клеменс Толбом

Вы можете использовать API WP-REST или создать собственный 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();
}

А затем в JavaScript, больше шагов необходимо. Во-первых, вам понадобится URL-адрес WP AJAX, который обычно, /wp-admin/admin-ajax.phpно может несколько отличаться. Он часто делается доступным для Javascript как глобальный ajaxurl или может быть спрятан в другом объекте, например woocommerce.ajaxurl. Вам нужно будет создать объект Javascript с элементом action, который указывает на вашу функцию и любые другие переменные, которые вам может понадобиться передать в вызов 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)

НТН


Для дальнейшего изучения WordPress и AJAX я могу предложить прочитать статьи, созданные Томом Макфарлином, он очень хорошо разбирается в WordPress и имеет несколько хороших постов, посвященных ajax, в частности [ google.co.uk/…
virtualLast
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.