¿Cómo recibir HTTP POST en WordPress?

22 ene 2017, 09:32:56
Vistas: 26.1K
Votos: 10

¿Cómo puedo escuchar y recibir un HTTP POST de un tercero en WordPress para poder procesar los datos del post dentro de WordPress?

No busco una respuesta con código sino más bien el método por el cual WordPress recibiría ese HTTP POST.

6
Comentarios

Oh, creo que puedes. Alguien aquí sabe cómo :)

James James
22 ene 2017 09:42:04

Si crees que es posible, entonces edita la pregunta y agrega las referencias relevantes

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

Veamos si otros responden, ¿de acuerdo? Ya uso un plugin que toma la notificación de pago instantáneo de PayPal en Wordpress y me permite hacer lo que quiera con esos datos. Así que sé que se puede hacer. Solo estoy buscando orientación positiva aquí. Como solía decir mi padre: "El que dice 'no puedo' nunca pudo. El que dice 'puedo' siempre puede."

James James
22 ene 2017 09:56:50

hmm creo que entendí mal la pregunta... pero ninguna de las respuestas es realmente la forma correcta de hacerlo para WordPress 4.4 y versiones posteriores

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

Entonces, ¿cuál ES la forma correcta?

James James
22 ene 2017 12:38:00
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 4
1

¡Fácil! Tienes un par de opciones para hacerlo.

La más sencilla, pero menos segura, es crear un nuevo archivo PHP en la carpeta raíz de WordPress. Digamos que lo llamaremos get_post.php y añadiremos funcionalidad de WordPress a él.

Así:

<?php 
    require_once('wp-load.php'); // añadir funcionalidad de WordPress
    $post = $_POST;

    if ( $something ) // comprobación de seguridad
    update_post_meta( $post['post_id'], 'post_data', $post );
?>

El enlace de la API será tudominio.com/get_posts.php

Otra opción es crear una nueva plantilla de página dentro de tu directorio de plantillas. Y luego crear una página usando esa plantilla desde el panel de control de WordPress.

<?php 
    /* Template Name: Plantilla API */ 

    if ( ! defined( 'ABSPATH' ) ) {
        exit;
    }

    $post = $_POST;

    update_post_meta( $post['post_id'], 'post_data', $post );
?>

El enlace de la API será: tudominio.com/permalink-de-la-pagina-creada.

22 ene 2017 10:19:11
Comentarios

Creo que esto necesita saneamiento y podría ser vulnerable?

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

Me gustaría dar un ejemplo a la respuesta de @Mark Kaplun. Puedes registrar un endpoint para procesar tus solicitudes HTTP POST usando register_rest_route de la siguiente manera:

/** primero crea una función para procesar tu solicitud */
function procesar_mi_solicitud(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('mensaje'=>'Éxito'));
      $response->set_status(200);
      return $response;
   }
   else{
        return new WP_Error('solicitud_invalida', 'Algo salió mal', array('estado'=>403));
   }
}

/** luego crea una función callback para registrar la ruta */
function registrar_mi_ruta(){
   register_rest_route('myplugin/v1', '/myroute', array(
        'methods'=>'POST',
        'callback'=>'procesar_mi_solicitud',
        'permission_callback'=>'funcion_de_autenticacion'
   ));
}
add_action('rest_api_init', 'registrar_mi_ruta');

Una vez que hayas hecho esto, ahora puedes enviar tus solicitudes POST a la siguiente ruta

site_url('wp-json/myplugin/v1/myroute');
9 feb 2021 06:31:53
1

Desde la versión 4.4 en adelante, WordPress tiene un punto final oficial para accesos tipo "API" - wp-json, el cual puedes extender definiendo tu propio punto de extensión y manejador con register_rest_route, nunca he intentado enviar una carga útil que no sea JSON de esta manera, pero asumo que debería ser posible, o tu frontend puede fácilmente codificarlo como JSON.

La ventaja sobre otras respuestas aquí es que le permite a WordPress saber que la solicitud es una petición de API y no una del frontend.

(en versiones antiguas podrías haber usado reglas de reescritura... pero es demasiado confuso como para siquiera mencionarlo)

22 ene 2017 12:48:53
Comentarios

Enlace al manual sobre 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

Debes comenzar creando una nueva plantilla de página partiendo de una plantilla que ya tengas en el tema (edita una plantilla, cambia el nombre de la plantilla en la parte superior de la página, guárdala como un archivo PHP diferente).

Luego añade el código PHP para procesar el HTTP post al nuevo archivo.

El último paso es ir al panel de control y crear una nueva página utilizando la nueva plantilla.

22 ene 2017 10:02:13
Comentarios

Estoy digiriendo lo que has escrito aquí... ¿la nueva página entonces "escucha" el HTTP POST desde fuera de Wordpress?

James James
22 ene 2017 10:06:46

Deberías enviar el Http post desde el sitio web de terceros a la nueva página que has creado y manejar los valores dentro del nuevo archivo php creado. El http post no debería enviarse al archivo php sino a la url de la página creada en el panel de control

Cdorob Cdorob
22 ene 2017 10:19:38