Skip to content
Atrás

Cómo automatizar las donaciones con Gravity Forms y ACF

Actualizado:
Editar página

En el post anterior explicamos la estructura del sistema de apadrinamientos: 1 perro → 1 padrino → pago recurrente.

Ahora vamos al grano: el código que hace que todo esto funcione.

Importante: esto está pensado para Gravity Forms con suscripciones, usando cualquier pasarela compatible (Stripe, Redsys, PayPal, etc.).

El hook clave es gform_post_subscription_started, que se ejecuta justo cuando la suscripción queda activa.

1. Shortcode para mostrar el formulario solo si el perro está disponible

Este snippet se coloca en el functions.php o en un plugin custom. Este snippet nos permite usar el mismo formulario para todos los perros:

// Shortcode que muestra el formulario solo si el perro no está apadrinado
add_shortcode('formulari_apadrinament', function() {
    $post_id = get_the_ID();
    $apadrinat = get_field('apadrinat', $post_id);

    if ($apadrinat) {
        $nom_padri = get_field('nom_padri', $post_id);
        return '<p style="color: green; font-weight: bold;">🐾 Aquest gos ja està apadrinat per <strong>' . esc_html($nom_padri) . '</strong>.</p>';
    } else {
        return do_shortcode('[gravityform id="3" field_values="post_id=' . $post_id . '"]');
    }
});

Qué hace:

2. Guardar automáticamente el padrino cuando se inicia la suscripción

Este es el snippet clave: marca el perro como apadrinado.

add_action('gform_post_subscription_started', function($entry, $subscription) {

    $post_id = rgar($entry, '6'); // ID del campo oculto que guarda el ID del perro
    $nom_padri = rgar($entry, '1'); // ID del campo del nombre del padrino

    // Si faltan datos, no hacemos nada
    if (!$post_id || !$nom_padri) return;

    // Solo actualizamos si el perro esta libre
    if (!get_field('apadrinat', $post_id)) {
        update_field('apadrinat', true, $post_id);
        update_field('nom_padri', $nom_padri, $post_id);
    }
}, 10, 2);

Puntos clave:

3. Mostrar el nombre del padrino en listados (loop)

Ideal para las páginas donde mostramos el listado de perros y damos acceso al single_post

add_shortcode('nom_padri_loop', function() {
    $post_id = get_the_ID();
    $apadrinat = get_field('apadrinat', $post_id);

    if ($apadrinat) {
        $nom_padri = get_field('nom_padri', $post_id);
        return '<p class="nom-padri">Apadrinat per <strong>' . esc_html($nom_padri) . '</strong></p>';
    }

    return '';
});

Utilizamos Elementor o gutemberg para insertar el shortcode dentro del item del loop:

[nom_padri_loop]

4. Liberar un perro cuando la suscripcion se cancela

Cuando el admin cancela la suscripción → el perro vuelve a estar disponible.

add_action('gform_subscription_canceled', function($entry, $subscription) {

    $post_id = rgar($entry, '6');

    if ($post_id) {
        update_field('apadrinat', false, $post_id);
        update_field('nom_padri', '', $post_id);
    }
}, 10, 2);

Resultado final


Editar página
Comparte:

Anterior
Planteamos un sistema de donaciones con Gravity Forms y pagos recurrentes
Siguiente
Markdown, escribe y no te compliques