Intereting Posts
Как отображать только избранные / липкие списки на главной странице Как хранить / получать доступ к файлам в папке дочерних тем Как направить пользователя на фактическую страницу 404, когда проверка является ложной в single.php? Обновления приватного плагина – Localhost Как настроить новый приветственный адрес пользователя Удалите столбец «Комментарий» во всех пост-типах Эффективный способ проверки локальных PHP-файлов WordPress и базы данных для вредоносного кода? подобно редактору, может создать любого нового пользователя, кроме администратора Сортировка сообщений по категориям? Удалить «Проверить совместимость» в меню «Плагины» Пожалуйста, объясните мне, что делает do_action Установить ограничение времени сеанса для защищенных паролем сообщений Внешние ссылки Nofollow Отображение только определенной категории в шаблоне пользовательской страницы Как удалить названия категорий?

Лучший способ для плагина принимать POST?

Проблема: я разрабатываю плагин, который должен принимать данные POST (веб-узлы из внешнего источника). У меня нет контроля над форматом данных POSTED. Мой единственный вариант для передачи моих собственных данных – это URL-адреса, переданные при регистрации веб-камеры.

До сих пор я придумал 3 идеи, ни одна из которых не кажется идеальной, но две из них определенно будут работать (я не думаю, что № 2 может работать …). Я надеюсь, что есть чистый способ добиться этого, не взломав WordPress слишком плохо.

  1. Направьте webhook на дом WP и просто слушайте в моем плагине для публикации (на основе некоторого произвольного параметра URL, который я бы включил в веб-приложение). Моя проблема заключается в том, что через полное создание страницы WordPress просто для получения POST требуется намного больше накладных расходов, чем это необходимо.

  2. По ходу моего исследования я нашел XML-RPC, который выглядел многообещающим, пока я не увидел, что он зависит от тела POST, содержащего информацию о вызове. Очевидно, что это не сработает. Есть ли какое-либо обходное решение, которое мне не хватает, или это тупик?

  3. Проводка непосредственно по URL-адресу в плагине. Затем требуется ручная загрузка WP. Не в целом идеальный …

Solutions Collecting From Web of "Лучший способ для плагина принимать POST?"

Один из вариантов заключается в использовании техники add_rewrite_endpoint , о которой я упоминаю в своем комментарии.

Другой вариант – использовать admin_post_{action} .

Например, вы можете использовать POST-данные для вашего URL-адреса с параметром GET action :

http://www.example.com/wp-admin/admin-post.php?action=my_plugin_action

Затем подключите это действие через admin_post_nopriv_my_plugin_action чтобы получить этот запрос и обработать данные:

 function wpd_my_plugin_action() { status_header(200); // do stuff echo $_POST['somedata']; die; } add_action( 'admin_post_nopriv_my_plugin_action', 'wpd_my_plugin_action' ); 

Оба варианта загружают WordPress без запуска основного запроса и загрузки шаблона.

EDIT: чтобы разрешать входящие POST-сообщения, вы должны подключиться к allowed_http_origin или allowed_http_origins (этот фильтр будет работать, только если POSTER устанавливает HTTP_ORIGIN ), иначе WordPress выкинет запросы до того, как они ударят ваше действие.