Cum să primești HTTP POST în WordPress?
Ușor! Ai câteva opțiuni pentru a face asta.
Cea mai simplă, dar mai puțin sigură, este să creezi un nou fișier PHP în folderul rădăcină al WordPress. Să spunem că îl vom numi get_post.php
și vom adăuga funcționalitatea WordPress în el.
Ca așa:
<?php
require_once('wp-load.php'); // adaugă funcționalitatea WordPress
$post = $_POST;
if ( $something ) // verificare de securitate
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Link-ul API va fi yourdomain.com/get_posts.php
O altă opțiune este să creezi un nou șablon de pagină în directorul șablonului tău. Și apoi să creezi o pagină folosind acel șablon din panoul de administrare WordPress.
<?php
/* Template Name: Șablon API */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
$post = $_POST;
update_post_meta( $post['post_id'], 'post_data', $post );
?>
Link-ul API va fi: yourdomain.com/newly-created-page-permalink
.

Aș dori să ofer un exemplu pentru răspunsul lui @Mark Kaplun. Poți înregistra un endpoint pentru a procesa cererile tale HTTP POST folosind register_rest_route în felul următor:-
/** mai întâi creează o funcție pentru procesarea cererii tale*/
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'=>'Succes'));
$response->set_status(200);
return $response;
}
else{
return new WP_Error('invalid_request', 'Ceva nu a funcționat', array('status'=>403));
}
}
/** apoi creează o funcție de callback pentru înregistrarea rutei */
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');
Odată ce ai făcut acest lucru, acum poți trimite cererile tale POST la următoarea cale
site_url('wp-json/myplugin/v1/myroute');

Începând cu versiunea 4.4 și mai nouă, WordPress are un punct final oficial pentru acces de tip "API" - wp-json, pe care îl poți extinde prin definirea propriului punct de extensie și handler cu register_rest_route, nu am încercat să trimit un payload non-json în acest fel, dar presupun că ar trebui să fie posibil, sau frontend-ul tău poate să-l codeze ușor ca json.
Avantajul față de alte răspunsuri de aici este că lasă WordPress să știe că cererea este una de API și nu una pentru frontend.
(în versiuni mai vechi ai fi putut folosi reguli de rescriere... dar este prea haotic pentru a menționa)

Link către manualul despre register_rest_route https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Ar trebui să începeți prin a crea un nou șablon de pagină pornind de la un șablon pe care îl aveți deja în temă (editați un șablon, schimbați numele șablonului în partea de sus a paginii, salvați ca un fișier PHP diferit).
Apoi adăugați codul PHP pentru a procesa postarea HTTP în noul fișier.
Ultimul pas este să mergeți în panoul de control și să creați o pagină nouă folosind noul șablon.

Încerc să înțeleg ce ai scris aici...noua pagină "ascultă" pentru HTTP POST din afara WordPress?
