Cum să primești HTTP POST în WordPress?

22 ian. 2017, 09:32:56
Vizualizări: 26.1K
Voturi: 10

Cum pot să ascult și să primesc un HTTP POST de la o terță parte în WordPress astfel încât să pot procesa datele din postare în interiorul WordPress?

Nu caut un răspuns cu cod, ci mai degrabă metoda prin care WordPress ar primi acel HTTP POST.

6
Comentarii

Oh, cred că poți. Cineva de aici știe cum :)

James James
22 ian. 2017 09:42:04

Dacă crezi că este posibil, atunci editează întrebarea și adaugă referințele relevante

Mark Kaplun Mark Kaplun
22 ian. 2017 09:48:54

Să vedem dacă alții răspund, bine? Deja folosesc un plugin care preia notificarea de plată instantă de la PayPal în WordPress și îmi permite să fac ce vreau cu acele date. Deci știu că se poate. Doar caut niște direcții pozitive aici. Cum obișnuia să spună tatăl meu: "Nu pot nu a putut niciodată. Poți întotdeauna poți."

James James
22 ian. 2017 09:56:50

hmm cred că am înțeles greșit întrebarea.... dar niciunul dintre răspunsuri nu este de fapt metoda corectă de a face asta pentru WordPress 4.4 și versiuni superioare

Mark Kaplun Mark Kaplun
22 ian. 2017 12:37:07

Deci care ESTE metoda corectă?

James James
22 ian. 2017 12:38:00
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 4
1

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.

22 ian. 2017 10:19:11
Comentarii

Cred că acest lucru are nevoie de o curățare și ar putea fi vulnerabil?

Oliver M Grech Oliver M Grech
30 iun. 2020 01:32:00
0

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');
9 feb. 2021 06:31:53
1

Î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)

22 ian. 2017 12:48:53
Comentarii

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

OctaviaLo OctaviaLo
24 feb. 2020 18:32:17
2

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.

22 ian. 2017 10:02:13
Comentarii

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

James James
22 ian. 2017 10:06:46

Ar trebui să trimiți POST-ul HTTP de pe site-ul terț către noua pagină pe care ai creat-o și să procesezi valorile în interiorul fișierului php creat. POST-ul HTTP nu ar trebui trimis direct către fișierul php, ci către URL-ul paginii create în panoul de control

Cdorob Cdorob
22 ian. 2017 10:19:38