¿La mejor manera de que el complemento acepte POST?

2

El problema: estoy desarrollando un complemento que necesita aceptar datos POST (webhooks de una fuente externa). No tengo control sobre el formato de los datos POST. Mi única opción para pasar mis propios datos es a través de los argumentos de URL pasados al registrar el webhook.

Hasta ahora se me han ocurrido 3 ideas, ninguna de las cuales parece ideal, pero dos de las cuales definitivamente funcionarían (no creo que la # 2 pueda funcionar ...). Espero que haya una manera limpia de lograr esto sin dañar demasiado a WordPress.

  1. Apunte el webhook a la página de inicio de WP y simplemente escuche dentro de mi complemento la publicación (basada en algún parámetro de URL arbitrario que incluiría dentro del webhook). Mi problema con esto es que pasar por la generación completa de una página de WordPress solo para recibir un POST es mucho más costoso de lo que debería ser necesario.

  2. A lo largo de mi investigación, encontré XML-RPC, que parecía prometedor, hasta que vi que dependía del cuerpo POST que contenía información de invocación. Obviamente eso no funcionará. ¿Hay alguna solución que me esté perdiendo o es un callejón sin salida?

  3. Publicar directamente en una URL dentro del complemento. Esto entonces requiere un arranque manual de WP. Generalmente no es ideal ...

pregunta Dan 14.02.2015 - 01:45

1 respuesta

6

Una opción es usar add_rewrite_endpoint técnica menciono en mi comentario.

Otra opción es usar el admin_post_{action} hook.

Por ejemplo, puede enviar datos POST a su URL con un parámetro action GET:

  

enlace

Luego conecte esa acción a través de admin_post_nopriv_my_plugin_action para recibir esa solicitud y procesar los datos:

function wpd_my_plugin_action() {
    status_header(200);
    // do stuff
    echo $_POST['somedata'];
    die;
}
add_action( 'admin_post_nopriv_my_plugin_action', 'wpd_my_plugin_action' );

Ambas opciones cargan WordPress sin ejecutar la consulta principal y cargar la plantilla.

EDITAR: para permitir los POST entrantes, debe enlazar con el allowed_http_origin o allowed_http_origins (este filtro solo funcionará si POSTER está configurando HTTP_ORIGIN ), de lo contrario, WordPress rechazará las solicitudes antes de que actúen.

    
respondido por el Milo 14.02.2015 - 02:46

Lea otras preguntas en las etiquetas