запустити silex або slim за допомогою wordpress


10

Я запускаю тему на WordPress. У цій темі я роблю кілька дзвінків AJAX, де очікую певної відповіді. ( http://example.com/capis/v0/packages/ )

Для обслуговування вищевказаних дзвінків я використовую 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
Я настійно рекомендую використовувати API REST замість Silex.
kraftner

Окрім API REST, згаданого @kraftner, ви також можете ознайомитись із рамками Themosis .
Фабіан Марц

Короткий приклад див., Наприклад, wordpress.stackexchange.com/questions/301493 Для мене developer.wordpress.org/rest-api/extending-the-rest-api/… був дуже корисним.
Клеменс Толбум

Ви можете використовувати API WP-REST або ви можете створити спеціальний API, використовуючи wp_ajax дії. ось офіційний doc
idpokute

Відповіді:


1

Мало що можна зробити з сервером Silex, що неможливо зробити за допомогою Wordpress, але потрібно трохи зусиль, щоб WP відповідав на дзвінки AJAX.

Перший крок - зробити доступ до дзвінка через AJAX. Для цього потрібно додати рядок до файлу function.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 з елементом дії, який вказує на вашу функцію та будь-які інші змінні, які, можливо, знадобляться для виклику 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, зокрема [ google.co.uk/…
virtualLast
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.