Come ricevere una richiesta HTTP POST in WordPress?
Facile! Hai un paio di opzioni per farlo.
La più semplice, ma meno sicura, è creare un nuovo file PHP nella cartella principale di WordPress. Diciamo che lo chiameremo get_post.php
e aggiungeremo la funzionalità di WordPress al suo interno.
In questo modo:
<?php
require_once('wp-load.php'); // aggiunge la funzionalità di WordPress
$post = $_POST;
if ( $something ) // controllo di sicurezza
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Il link dell'API sarà yourdomain.com/get_posts.php
Un'altra opzione è creare un nuovo template di pagina all'interno della directory del tuo tema. E creare una pagina utilizzando quel template tramite la dashboard di WordPress.
<?php
/* Template Name: Template API */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
$post = $_POST;
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Il link dell'API sarà: yourdomain.com/newly-created-page-permalink
.

Vorrei fornire un esempio alla risposta di @Mark Kaplun. Puoi registrare un endpoint per elaborare le tue richieste HTTP POST utilizzando register_rest_route in questo modo:-
/** prima crea una funzione per elaborare la tua richiesta*/
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'=>'Successo'));
$response->set_status(200);
return $response;
}
else{
return new WP_Error('invalid_request', 'Qualcosa è andato storto', array('status'=>403));
}
}
/** poi crea una funzione di callback per registrare la route */
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');
Una volta fatto ciò, ora puoi inviare le tue richieste POST al seguente percorso
site_url('wp-json/myplugin/v1/myroute');

A partire dalla versione 4.4 e successive, WordPress offre un endpoint ufficiale per l'accesso di tipo "API" - wp-json, che puoi estendere definendo il tuo punto di estensione e gestore con register_rest_route. Non ho mai provato a inviare un payload non JSON in questo modo, ma presumo che dovrebbe essere possibile, oppure il tuo frontend può facilmente codificarlo come JSON.
Il vantaggio rispetto ad altre soluzioni qui presenti è che permette a WordPress di riconoscere che la richiesta è un'API request e non una destinata al frontend.
(nelle versioni più vecchie avresti potuto usare le rewrite rules... ma è troppo complicato persino da menzionare)

Link al manuale su register_rest_route https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Dovresti iniziare creando un nuovo template di pagina partendo da un template che hai già nel tema (modifica un template, cambia il nome del template nella parte superiore della pagina, salva come un file PHP diverso).
Poi aggiungi il codice PHP per elaborare l'HTTP post nel nuovo file.
L'ultimo passo è andare nella dashboard e creare una nuova pagina utilizzando il nuovo template.

Sto elaborando quello che hai scritto qui... la nuova pagina quindi "ascolta" l'HTTP POST proveniente dall'esterno di WordPress?
