add_action('forminator_custom_form_submit_before_set_fields', 'generar_imagen_con_ia', 10, 3);
function generar_imagen_con_ia($entry, $form_id, $field_data_array) {
// Asegúrate de que este es el ID de tu formulario
if ($form_id != 18059) return;
$name-1 = '';
$select-1 = '';
$select-2 = '';
$email-1 = '';
$upload-1 = '';
foreach ($field_data_array as $field) {
if ($field['name'] === 'email') $email = $field['value'];
if ($field['name'] === 'file-upload') $image_url = $field['value'];
}
if (!$email || !$image_url) return;
// Llama a la API de Replicate
$api_token = 'r8_NeUwhhRT4JYbYF6wFEzhv2kA4ezwSe324mdV0';
$model = 'cjwbw/photo-to-cartoon';
$response = wp_remote_post('https://api.replicate.com/v1/predictions', [
'headers' => [
'Authorization' => 'Token ' . $api_token,
'Content-Type' => 'application/json',
],
'body' => json_encode([
'version' => '3k6cxgk61xrmc0cpnd9tfwjmtr', // se explica abajo
'input' => [
'image' => $image_url
]
])
]);
$body = json_decode(wp_remote_retrieve_body($response), true);
$prediction_url = $body['urls']['get'];
// Esperar a que se genere la imagen (máximo 30s)
$output_image = null;
for ($i = 0; $i < 15; $i++) {
sleep(2);
$check = wp_remote_get($prediction_url, [
'headers' => ['Authorization' => 'Token ' . $api_token]
]);
$check_data = json_decode(wp_remote_retrieve_body($check), true);
if ($check_data['status'] == 'succeeded') {
$output_image = $check_data['output'];
break;
}
}
if ($output_image) {
// Enviar correo con imagen
$subject = "Tu imagen personalizada de la feria de motos 🏍️";
$message = "Gracias por participar. Aquí tienes tu imagen:
"; $message .= "
";
wp_mail($email, $subject, $message, ['Content-Type: text/html; charset=UTF-8']);
}
}
"; $message .= "