Enviar datos del post de WordPress a un webhook una vez publicado un post

Tiempo de lectura: 2 minutos

Hoy vamos a ver cómo podemos enviar datos de WordPress a un webhook en el momento que se realice una publicación.

Flores - Pexels

Lo primero que haremos es instalar el plugin llamado Code Snippet que nos permite añadir código.

Le damos a añadir nuevo código:

add_action('transition_post_status', 'enviar_a_a_webhook', 10, 3);

function enviar_a_webhook($new_status, $old_status, $post) {
    // Verificar que el post ha cambiado a "publish" desde cualquier otro estado
    if ('publish' !== $new_status || 'publish' === $old_status) {
        return; // Solo enviar si el post cambia a "publish" (y no es ya publicado)
    }

    // Verificar que el post no es una revisión
    if (wp_is_post_revision($post->ID)) {
        return;
    }

    $webhook_url = 'https://n8n.web.com/webhook/post-wordpress';

    // Si usas WPML o Polylang, ajusta esto para obtener el idioma
    $language = function_exists('pll_get_post_language') ? pll_get_post_language($post->ID) : 'es';

    $data = [
        'id' => $post->ID,
        'title' => $post->post_title,
        'content' => apply_filters('the_content', $post->post_content), // HTML limpio renderizado
        'slug' => $post->post_name,
        'author' => get_the_author_meta('display_name', $post->post_author),
        'date' => $post->post_date,
        'status' => $post->post_status,
        'language' => $language,
        'categories' => wp_get_post_categories($post->ID),
        'tags' => wp_get_post_tags($post->ID, ['fields' => 'names']),
    ];

    // Añadir log para los datos antes de enviarlos
    error_log('Datos enviados: ' . print_r($data, true));

    // Enviar los datos al webhook
    $response = wp_remote_post($webhook_url, [
        'method' => 'POST',
        'headers' => ['Content-Type' => 'application/json'],
        'body' => json_encode($data),
    ]);

    // Comprobación de la respuesta del webhook
    if (is_wp_error($response)) {
        error_log('Error en la respuesta del webhook: ' . $response->get_error_message());
    } else {
        error_log('Webhook enviado correctamente: ' . wp_remote_retrieve_body($response));
    }
}

Debes cambiar la URL por la de tu webhook.

Deja un comentario