L’integrazione di Mailchimp in un form di WordPress utilizzando Stimulus e WP-AJAX consente di gestire le iscrizioni alla tua newsletter in modo efficiente e senza ricaricare la pagina. In questo tutorial, vedremo passo dopo passo come implementare questa soluzione.
Prerequisiti
- Un sito WordPress attivo
- Un account Mailchimp
- Familiarità con JavaScript e WordPress
Aggiungere Stimulus e WP-AJAX al Tema WordPress
Aggiungere Stimulus
- Scarica Stimulus da GitHub o installalo tramite npm.
- Aggiungi il file JavaScript di Stimulus al tuo tema. Puoi farlo aggiungendo il file alla cartella del tema e includendolo nel tuo
functions.php
.
</p> <p>function enqueue_custom_scripts() {<br /> wp_enqueue_script( 'stimulus', get_template_directory_uri() . '/js/stimulus.js', array(), null, true );<br /> wp_enqueue_script( 'custom-js', get_template_directory_uri() . '/js/custom.js', array('stimulus', 'jquery'), null, true );</p> <p>// Passa l'url admin-ajax.php a JavaScript<br /> wp_localize_script( 'custom-js', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );<br /> }<br /> add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts' );</p> <p>
Nella cartella controllers
, crea un file SubscriptionController.js
:
</p> <p>import { Controller } from "stimulus";<br /> export default class MailChimpController extends Controller {<br /> statictargets= ["form", "submitButton", "privacyCheckbox"];<br /> connect() {<br /> this.formTarget.addEventListener("submit", (event) => {<br /> event.preventDefault();<br /> this.subscribe();<br /> });<br /> // Ascolto cambiamento della checkbox privacy<br /> if (this.hasPrivacyCheckboxTarget &&this.hasSubmitButtonTarget) {<br /> this.privacyCheckboxTarget.addEventListener(<br /> "change",<br /> this.toggleSubmitButton<br /> );<br /> // Imposta lo stato iniziale del pulsante di invio<br /> this.toggleSubmitButton();<br /> }<br /> }<br /> subscribe() {<br /> constformData=newFormData(this.formTarget);<br /> constemail=formData.get("email");<br /> constnome=formData.get("nome");<br /> constcognome=formData.get("cognome");</p> <p>fetch(ajax_call.ajax_url, {<br /> method:"POST",<br /> headers: {<br /> "Content-Type":"application/x-www-form-urlencoded",<br /> },<br /> body:newURLSearchParams({<br /> action:"mailchimp_subscribe",<br /> email:email,<br /> nome:nome,<br /> cognome:cognome,<br /> stato:stato,<br /> }),<br /> })<br /> .then((response) => response.json())<br /> .then((data) => {<br /> if (data.success) {<br /> alert("Iscrizione avvenuta con successo!");<br /> } else {<br /> leterrorMessage="Errore nell'iscrizione: "+data.data.detail;<br /> if (data.data.errors &&data.data.errors.length >0) {<br /> errorMessage+="\nDettagli degli errori:\n";<br /> data.data.errors.forEach((error) => {<br /> errorMessage+=`- ${error.field}: ${error.message}\n`;<br /> });<br /> }<br /> alert(errorMessage);<br /> }<br /> });<br /> }<br /> toggleSubmitButton= () => {<br /> if (this.privacyCheckboxTarget.checked) {<br /> this.submitButtonTarget.removeAttribute("disabled");<br /> } else {<br /> this.submitButtonTarget.setAttribute("disabled", "disabled");<br /> }<br /> };<br /> }</p> <p>
Passo 5: Creare l’Handler per WP-AJAX
Nel file functions.php
del tuo tema, aggiungi il seguente codice per gestire la richiesta AJAX:
</p> <p><!--?php function mailchimp_subscribe() { if (!isset($_POST['email']) ||!isset($_POST['nome']) ||!isset($_POST['cognome']) ||!isset($_POST['stato']) ) { wp_send_json_error(array('detail'=>'Dati mancanti nella richiesta.'));<br ?--> wp_die();<br /> }<br /> $email = sanitize_email($_POST['email']);<br /> $nome = sanitize_text_field($_POST['nome']);<br /> $cognome = sanitize_text_field($_POST['cognome']);<br /> $stato = sanitize_text_field($_POST['stato']);<br /> $api_key = 'la_tua_api_key; // Informazioni sulle chiavi API: https://eepurl.com/hYsN2L<br /> $list_id = 'la_tua_lista_id'; // Trova l’ID del tuo pubblico: https://eepurl.com/hYsTSv<br /> $data_center = substr($api_key, strpos($api_key, '-') + 1);<br /> $url = 'https://' . $data_center . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members';<br /> $body = json_encode([<br /> 'email_address'=>$email,<br /> 'status'=>'subscribed',<br /> 'merge_fields'=>[<br /> 'FNAME'=>$nome,<br /> 'LNAME'=>$cognome,<br /> ]);<br /> $response = wp_remote_post($url, [<br /> 'headers'=>[<br /> 'Authorization'=>'Basic '.base64_encode('user:'.$api_key),<br /> 'Content-Type'=>'application/json',<br /> ],<br /> 'body'=>$body,<br /> ]);<br /> if (is_wp_error($response)) {<br /> wp_send_json_error(array('detail'=>'Errore durante la comunicazione con MailChimp.'));<br /> wp_die();<br /> }<br /> $response_body = json_decode(wp_remote_retrieve_body($response));<br /> if (isset($response_body->status) && $response_body->status ==='subscribed') {<br /> wp_send_json_success(array('status'=>'subscribed'));<br /> } else {<br /> $error_detail = isset($response_body->detail) ? $response_body->detail : 'Errore sconosciuto';<br /> $errors = isset($response_body->errors) ? $response_body->errors : [];<br /> wp_send_json_error(array('detail'=>$error_detail,'errors'=>$errors));<br /> }</p> <p>wp_die();}<br /> add_action('wp_ajax_mailchimp_subscribe', 'mailchimp_subscribe');<br /> add_action('wp_ajax_nopriv_mailchimp_subscribe', 'mailchimp_subscribe');</p> <p>
Passo 6: Integrare il Form e Stimulus nel Template
Nel template del tuo tema (ad esempio page.php
o single.php
), aggiungi il form di iscrizione e collega Stimulus:
</p> <form class="form" data-mailchimp-target="form"> <div class="row"> <div class="col-3"><input name="nome" required="" type="text" placeholder="Nome*" /></div> <div class="col-3"><input name="cognome" required="" type="text" placeholder="Cognome*" /></div> <div class="col-3"><input name="email" required="" type="email" placeholder="Email*" /></div> </div> <div class="row"> <div class="col-9"> <div class="input-checkbox"><input name="privacy" required="" type="checkbox" data-mailchimp-target="privacyCheckbox" /><br /> <label for="privacy">Utilizzando questo form acconsenti all’utilizzo e alla conservazione dei<br /> tuoi dati<br /> da parte di questo sito web in accordo con la nostra normativa sulla privacy.<br /> * Campi obbligatori</label></div> </div> <div class="col-3"><button class="btn" disabled="disabled" type="submit" data-mailchimp-target="submitButton">Iscriviti</button></div> </div> </form> <p>
Passo 7: Testare il Form
- Vai alla pagina in cui hai inserito il form.
- Inserisci un’email e clicca su “Subscribe”.
- Verifica che l’email venga inviata correttamente a Mailchimp e che il feedback appropriato venga mostrato.
Conclusione
In questo tutorial, abbiamo visto come integrare Mailchimp in un form su WordPress utilizzando Stimulus e WP-AJAX. Questa configurazione ti permette di gestire le iscrizioni alla tua newsletter in modo asincrono, migliorando l’esperienza utente e ottimizzando la tua strategia di email marketing.