Come ricevere una richiesta HTTP POST in WordPress?

22 gen 2017, 09:32:56
Visualizzazioni: 26.1K
Voti: 10

Come posso intercettare e ricevere una richiesta HTTP POST da terze parti in WordPress in modo da poter elaborare i dati del post all'interno di WordPress?

Non cerco una risposta con il codice ma piuttosto il metodo con cui WordPress dovrebbe ricevere quella richiesta HTTP POST.

6
Commenti

Oh penso che tu possa. Qualcuno qui sa come farlo :)

James James
22 gen 2017 09:42:04

Se pensi che sia possibile, allora modifica la domanda e aggiungi i riferimenti pertinenti

Mark Kaplun Mark Kaplun
22 gen 2017 09:48:54

Vediamo se altri rispondono, ok? Io uso già un plugin che prende la notifica di pagamento istantaneo di PayPal e la integra in WordPress, permettendomi di fare ciò che voglio con quei dati. Quindi so che si può fare. Sto solo cercando qualche indicazione positiva qui. Come diceva mio padre: "Non posso non ha mai potuto. Posso sempre può."

James James
22 gen 2017 09:56:50

hmm penso di aver frainteso la domanda... ma nessuna delle risposte è in realtà il modo corretto di farlo per WordPress 4.4 e versioni successive

Mark Kaplun Mark Kaplun
22 gen 2017 12:37:07

Quindi qual è il modo GIUSTO?

James James
22 gen 2017 12:38:00
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
1

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.

22 gen 2017 10:19:11
Commenti

Penso che questo abbia bisogno di una sanificazione e potrebbe essere vulnerabile?

Oliver M Grech Oliver M Grech
30 giu 2020 01:32:00
0

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

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)

22 gen 2017 12:48:53
Commenti

Link al manuale su 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

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.

22 gen 2017 10:02:13
Commenti

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

James James
22 gen 2017 10:06:46

Dovresti inviare il POST HTTP dal sito web di terze parti alla nuova pagina che hai creato e gestire i valori all'interno del nuovo file php creato. L'HTTP POST non dovrebbe essere inviato al file php ma all'URL della pagina creata nella dashboard

Cdorob Cdorob
22 gen 2017 10:19:38