Как получить HTTP POST в WordPress?
Легко! У вас есть несколько вариантов для этого.
Самый простой, но менее безопасный - создать новый PHP-файл в корневой папке WordPress. Допустим, мы назовем его get_post.php
и добавим в него функционал WordPress.
Вот так:
<?php
require_once('wp-load.php'); // добавляем функционал WordPress
$post = $_POST;
if ( $something ) // проверка безопасности
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Ссылка на API будет: yourdomain.com/get_posts.php
Другой вариант - создать новый шаблон страницы в директории вашей темы. Затем создать страницу с этим шаблоном через панель управления WordPress.
<?php
/* Template Name: API Шаблон */
if ( ! defined( ‘ABSPATH’ ) ) {
exit;
}
$post = $_POST;
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Ссылка на API будет: yourdomain.com/newly-created-page-permalink
.

Я хотел бы привести пример к ответу @Mark Kaplun. Вы можете зарегистрировать конечную точку для обработки ваших HTTP POST запросов, используя register_rest_route следующим образом:
/** Сначала создаем функцию для обработки запроса */
function process_my_request(WP_REST_Request $request)
{
$request_body = $request->get_body_params();
if(update_post_meta( $request_body['post_id'], 'post_data', $request_body ))
{
$response = new WP_REST_Response(array('message'=>'Успешно'));
$response->set_status(200);
return $response;
}
else{
return new WP_Error('invalid_request', 'Что-то пошло не так', array('status'=>403));
}
}
/** Затем создаем функцию регистрации маршрута */
function register_my_route(){
register_rest_route('myplugin/v1', '/myroute', array(
'methods'=>'POST',
'callback'=>'process_my_request',
'permission_callback'=>'some_auth_function'
));
}
add_action('rest_api_init', 'register_my_route');
После того как вы это сделали, теперь вы можете отправлять свои запросы по следующему пути
site_url('wp-json/myplugin/v1/myroute');

Начиная с версии 4.4 и выше, WordPress имеет официальную конечную точку для доступа типа "API" - wp-json, которую вы можете расширить, определив свою собственную точку расширения и обработчик с помощью register_rest_route. Я никогда не пробовал отправлять не-JSON полезную нагрузку таким способом, но предполагаю, что это должно быть возможно, или ваш фронтенд может легко закодировать её в JSON.
Преимущество перед другими решениями здесь в том, что это позволяет WordPress понимать, что запрос является API-запросом, а не фронтенд-запросом.
(в более старых версиях вы могли бы использовать правила перезаписи... но это слишком грязно, чтобы даже упоминать)

Ссылка на руководство по register_rest_route https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Вам следует начать с создания нового шаблона страницы на основе уже имеющегося в теме шаблоне (отредактируйте шаблон, измените его название в верхней части страницы и сохраните как отдельный PHP-файл).
Затем добавьте PHP-код для обработки HTTP POST-запроса в новый файл.
Последний шаг — перейти в админ-панель и создать новую страницу, используя новый шаблон.

Я обдумываю то, что вы написали... значит, новая страница затем "прослушивает" HTTP POST запрос извне WordPress?
