Gravity Forms y Mailpoet son dos de mis plugins favoritos para hacer cada uno su trabajo. Y es muy habitual que en una misma web haya formularios de uno de ellos y del otro.
Normalmente el formulario de suscripción genérico de la web lo implementamos mediante los formularios de MailPoet y el formulario de contacto mediante Gravity Forms.
¿Y qué ocurre si en el mismo formulario de contacto añadimos una posibilidad de suscribirse a las novedades? Ahí es donde entra el código que vamos a detallar a continuación.
Para implementar este código vamos a necesitar tener instalado el plugin Code Snippets o trabajar sobre el fichero functions.php
. Os aconsejo claramente lo primero.
También tenemos que identificar el número del formulario Gravity Forms:
Inicialmente, tenemos que identificar los números de los campos del formulario Gravity Forms que vamos a conectar con MailPoet. En mi caso, suelen ser los siguientes dos campos:
- Correo electrónico
- Nombre
Y finalmente, tenemos que identificar el número de la lista de MailPoet de la siguiente manera:
Y por último, hay un campo muy importante, para cumplir con la normativa: la aceptación de ser miembro de la lista. Para ello añadimos un control de tipo «Casillas» de Gravity Forms con una única casilla, de esta forma:
Código PHP para enviar contactos desde Gravity Forms a MailPoet
A continuación veremos el código, teniendo en cuenta que tenemos los siguientes identificadores:
- Identificador del formulario Gravity Forms: 2
- Identificador de la lista MailPoet: 3
- Identificador del campo Nombre: 7
- Identificador del campo Email: 3
- Campo de aceptación: «4.1»
add_action('gform_after_submission', 'suscribir_a_mailpoet', 10, 2);
function suscribir_a_mailpoet($entry, $form)
{
$formulario_id_deseado = 2;
if ($form['id'] != $formulario_id_deseado) return;
$casilla_suscripcion_id = "4.1";
$quiere_suscribirse = rgar($entry, $casilla_suscripcion_id);
//El número del campo nombre
$campo_nombre = 7;
$nombre = rgar($entry, $campo_nombre);
// Verifica si la casilla de suscripción está marcada
if ($quiere_suscribirse)
{
// Asegúrate de reemplazar 'Z' con el ID del campo de correo electrónico en tu formulario
$correo_electronico_id = 3;
$correo_electronico = rgar($entry, $correo_electronico_id);
if (!empty($correo_electronico))
{
$lista_id = 3;
$list_ids = array($lista_id);
//El cf_1 es un customfield añadido en el formulario de suscripción de Mailpoet con la aceptación.
$subscriber_data = array(
'email' => $correo_electronico,
// Agrega el usuario a la lista especificada
'first_name' => $nombre,
// Puedes añadir más campos aquí si lo necesitas
//'cf_1' => true,
);
try
{
$subscriber = \MailPoet\API\API::MP('v1')->addSubscriber($subscriber_data,$list_ids);
// Suscripción exitosa, puedes hacer algo aquí si lo necesitas
}
catch (Exception $e)
{
// Manejo de error
error_log('Error al suscribir a MailPoet: ' . $e->getMessage());
}
}
}
}
En el código podréis ver esta parte:
$subscriber_data = array(
'email' => $correo_electronico,
// Agrega el usuario a la lista especificada
'first_name' => $nombre,
// Puedes añadir más campos aquí si lo necesitas
//'cf_1' => true,
);
Donde hay un campo comentado llamado cf_1
. Ese campo significa que podemos crear campos personalizados en MailPoet y la forma de identificarlos es mediante cf_1
, cf_2
, …
En el siguiente enlace se puede consultar más información, en el API de MailPoet.