INDICE ARGOMENTI ARTICOLO
- WordPress perchè un futuro (Forse) oscuro
- Plugin ACF e il contenzioso tra Automattic e WpEngine
- Progetto pratico – costruzione di un Form di registrazione personalizzato per Woocommerce tramite AI e codice PHP
- Come interagire con l’intelligenza artificiale in modo corretto per lo sviluppo di codice PHP
WordPress perchè un Futuro (Forse) oscuro
Vorrei iniziare questo post dedicato al CMS WordPress con due premesse. La prima sta nel titolo ed è racchiusa dalla parola “Forse” perché desidero essere ottimista e dunque pensare ad un futuro fiorente ancora possibile per WordPress. La seconda premessa nasce da una mia riflessione su vari aspetti e criticità di questo CMS che danno una lettura abbastanza oscura circa il futuro nell’utilizzo di WordPress come software ‘Open Source’ nella realizzazione di siti web. Questa mia riflessione, che cercherò di sviluppare nel corso di questo articolo, ha trovato conferme anche in rete. A tale scopo voglio iniziare con un post scritto su uno dei gruppi Facebook più seguiti e dedicato a WordPress:

WordPress è sicuramente il CMS più utilizzato al mondo per la realizzazione di siti web grazie alla sua facilità di gestione che ha permesso a tantissimi potenziali webmaster di adottarlo come strumento di utilizzo nella realizzazione di siti web. Essendo dunque un software di massa ha trovato innumerevoli sbocchi perché ha permesso di realizzare progetti web velocemente e in maniera professionale. Anche io ho ottenuto benefici non solo come strumento di utilizzo pratico ma anche come materiale di studio per i miei corsi online.
WordPress è nato come software per realizzare blog e devo dire che per questa caratteristica l’obiettivo è stato perfettamente raggiunto. Anche il mio sito/blog di Progettimultimediali.com è stato realizzato con WordPress. Poi però si è evoluto anche per essere utilizzato in altri scopi grazie alla flessibilità di espansione dei Plugin.
Queste estensioni hanno permesso di espandere le funzionalità del CMS e di trasformarlo in diverse applicazioni. Dai Plugin più semplici che ci permettono di realizzare slide, gallery fotograficche o Page builder come ‘Elementor’ a sistemi più complessi che ci permettono di avventurarci in progetti più ardidi come ad esempio un portale di commercio elettronico con il Plugin ‘Woocommerce’.
Questa caratteristica costituita dai Plugin sviluppati da diverse software house ha costituito un vantaggio ma anche una grande limitazione alla crescita e alle prospettive future di WordPress.
Una sorte negativa che già è toccata ad altri CMS precedenti come Joomla con le estensioni formate da componenti, moduli e plugin.
Molti dei Plugin di WordPress è solo in parte gratuito, le estensioni sono infatti limitate nell’utilizzo e prevedono costi spesso in abbonamento per le versioni premium e questa situazione investe anche i temi grafici.
Ci sono poi estensioni completamente gratuite ma che prevedono altri Plugin di corredo come un vero e proprio ecosistema di collegamento. Woocommerce è un classico esempio di questa situazione con centinaia di plugin a pagamento che vanno a completare l’estensione principale concessa gratuitamente.
È come un gioco di seduzione…ci consentono di utilizzare gratis la funzionalità principale dei Plugin per poi rifilarci tantissime altre estensioni a pagamento per completare il nostro lavoro di costruzione dei siti web.
Questa caratteristica ha comportato una specie di appiattimento cerebrale nello sviluppo di siti web; tutto è possibile fino a quando le esigenze diventano più complicate e a questo punto si andrà alla ricerca del solito Plugin che risolverà il problema anche se a pagamento. Il sistema poi è diventato ancora più subdolo perché molte estensioni sono concesse sotto forma di abbonamento annuale e spesso con costi abbastanza onerosi.
Ormai WordPress è prigioniero del mondo dei Plugin una specie di ricatto continuo che investe tantissimi utilizzatori del CMS soprattutto di coloro che si sono avventurati in questo mondo senza avere un background di programmazione con codice PHP, CSS, e JavaScript alle spalle.
Dunque si và alla ricerca del Plugin che possa risolvere il problema di turno, gratuito o a pagamento che sia, o nei casi più estremi anche un’estensione ‘Pezzotta’ o ‘nulled’ come si dice tecnicamente…ma qui apriamo un altro discorso nel sottobosco di WordPress dove per il momento preferirei non addentrarmi.
È un po’ come giocare con le costruzioni dove i plugin sono gli elementi che utilizziamo per assemblare il progetto finale e se non troviamo i mattoncini giusti rincorriamo qualunque metodo per ottenerlo.
Questa caratteristica di WordPress ha visto paradossalmente far lievitare i costi di realizzazione dei siti web. Da strumento in origine Open source a prodotto a pagamento con il sistema dei Plugin i cui costi immancabilmente vengono girati verso il cliente finale.
Succederà presto che WordPress non sarà più conveniente ed allora occorrerà guardarsi intorno alla ricerca di altre drastiche soluzioni possibili.
Automattic vs WpEngine

Recentemente, una controversia ha scosso il mondo dell’open source, mettendo a confronto Automattic, l’azienda dietro WordPress, e WP Engine, sviluppatore del popolare plugin ACF. La disputa ha suscitato grande clamore, culminando con una delle due parti che ha deciso di ritirarsi dalla contesa, rivendicando diritti sul controllo di WordPress.”
In pratica WpEngine è stata definita da Automattic come “Un cancro per Wodpress” che nei vari anni ha rubato risorse e prestigio senza apportare alcun supporto vantaggioso per il CMS. Gli utenti sono stati confusi da una comunicazione fuorviante che ha indotto a credere che ACF fosse parte integrante del progetto Worpress.
Sono partite richieste e minacce legali da parte di Automattic verso WpEngine per chiedere una licenza d’uso su WordPress per il mantenimento delle applicazioni gestite da WpEngine all’interno del Repository.
Ricordiamo che ACF è uno dei Plugin più importanti nell’ecosistema di WordPress perchè permette di estendere le funzionalità del core (nato per essere un gestore di Blog) donando al CMS personalizzazione e flessibilità. In pratica con ACF i costruttori di siti web possono agire nel sistema con l’inserimento di campi di vario tipo (testo, immagini, file, date etc) come input di dati e visualizzarli in modo personalizzato (considerate comunque che il CMS Drupal con i moduli CCK+Views già integrati nel core è avanti anni luce dal Plugin ACF in WordPress e simili e questa diatriba non avrebbe modo di esistere – Corso Drupal).
Automattic ha imposto la propria autorità cancellando il Plugin dai Repository di Wordrpress nel backend del CMS, per motivazioni di sicurezza, e creando un Plugin analogo con il nome di SCF.
Tutta questa situazione ha disorientato la comunità dei produttori di Plugin e anche degli utenti finali aprendo scenari oscuri sul futuro della piattaforma di WordPress.
Progetto pratico – costruzione di un Form di registrazione personalizzato per Woocommerce tramite AI e codice PHP

Torniamo adesso al problema principale legato alla diffusione di wordpress come software di massa per lo sviluppo di siti web in relazione all’offerta di estensioni spesso a pagamento o parzialmente gratuite.
Partiamo da un’esperienza personale…un’azienda che ci ha chiesto di realizzare un modulo di registrazione utenti prima di effettuare un’ordine all’interno di un portale di ecommerce realizzato con il Plugin Woocommerce.
Wocommerce, come spiegato in precedenza, è un’altra estensione fantastica che permette di trasformare WordPress in un portale di E-commerce, viene fornito gratuitamente ma corredato anche da una quantità enorme di Plugin che ne completano le funzionalità. Infatti spesso per completare le parti di un sito di commercio elettronico possiamo attingere a un vasto archivio di Plugin di terze parti che ci aiutano facilmente a realizzare i nostri progetti tra cui anche moduli di registrazione con i dati di input collegati automaticamente con il form Checkout di Woocommerce. Molti di questi Plugin hanno però caratteristiche limitate e per utilizzare le funzionalità complete occorre naturalmente pagare un abbonamento annuale spesso non proprio economico.
In questo modo, come spiegato prima, il costo finale del sito web arriverebbe alle stelle e ci troveremmo nella situazione di utilizzare un CMS Open Source solo di facciata con un corredo ampio di Plugin a pagamento.
La soluzione più semplice e gratuita sarebbe quella di agire sul codice di WordPress ma questo richiederebbe conoscenze approfondite su elementi di programmazione web.
Cerchiamo dunque di partire da concetti che possano essere adottati anche da sviluppatori che non hanno una preparazione di base adeguata. Una specie di contrappeso all’utitizzo dei Plugin.
Oggi è possibile fare questo grazie all’avvento dell’intelligenza artificiale utilizzata in modo corretto durante l’esercizio della professione di webmaster.
Obiettivi del progetto: Creazione di un Form di Registrazione i cui dati di input (in particolare quelli fiscali) siano collegati in automatico con il modulo checkout di Woocommerce e dunque salvati anche nel database MySqL nella tabella di Woocommerce corrispondente.
Inoltre i dati di registrazione del dovranno essere inviati all’email del soggetto amministratore e dunque l’azienda che ci ha commissionato il lavoro.
Per iniziare il lavoro possiamo installare il Plugin “Checkout Fiedl Editor For Woocommerce” che ci permetterà di personalizzare i campi del modulo Checkout di Woocommerce che potremo anche utilizzare nel Form di registrazione.
Installato il Plugin Possiamo estendere i campi di Woocommerce a livello di Form Fiscale. Il committente ha bisogno di un Form di registrazione di questo tipo:
Nome, Cognome, Sede legale, Sede operativa (eventuale), città, provincia, cap, telefono, indirizzo email, codice fiscale, partita iva, pec, codice univoco, Personalizzazione del campo note.

Per il nostro -scopo- utilizzereremo un account di ChatGpt (questa sezione dell’articolo è corredato anche da un video su YOUTUBE)
Abbiamo chiesto all’intelligenza artificiale la seguente richesta:
“Crea un form di registrazione per Woocommerce con campi personalizzati:
“billing_first_name”
“billing_last_name”
“billing_company”
“billing_addres1”
Billing_adderess2″
“billing_city”
“billing_state”
“billing_postcode”
“billing_phone”
“billing_cf”
“billing_piva”
“billing_pec”
“Billing_sdi”
“order_comments”
inserisci alla fine un campo checkbox obbligatorio con descrizione “Privacy trattamento dati personali”
Questi dati di input devono essere validati e obbligatori e richiamati automaticamente anche nel form checkout di woocommerce. Quindi salvati nel database di WordPress“
Inoltre i dati devono esserer inviati automaticamente all’email dell’amministratore del sito web.
Il nome dei campi è stato prelevato dal Plugin “Checkout Fiedl Editor For Woocommerce”.
In pratica la costruzione del nostro modulo si sviluppa in 3 fasi:
- Creazione dei campi di Input
- Validazione dei campi
- Salvataggio nel database di WordPress per essere richiamati in automatico nel modulo Ceckout di Woocommerce.
Questo uno schema semplificato del processo di funzionamento del codice PHP:

Dopo alcuni tentativi che hanno rilevato alcuni errori di sintassi nel codice PHP siamo giunti al codice finale dettato da ChatGpt che è il seguente:
// Aggiungi campi personalizzati al modulo di registrazione
add_action('woocommerce_register_form', function() {
?>
<p class="form-row form-row-first">
<label for="reg_billing_first_name"><?php esc_html_e('First Name', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_first_name" id="reg_billing_first_name" value="<?php echo esc_attr(!empty($_POST['billing_first_name']) ? $_POST['billing_first_name'] : ''); ?>" />
</p>
<p class="form-row form-row-last">
<label for="reg_billing_last_name"><?php esc_html_e('Last Name', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_last_name" id="reg_billing_last_name" value="<?php echo esc_attr(!empty($_POST['billing_last_name']) ? $_POST['billing_last_name'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_company"><?php esc_html_e('Company Name', 'woocommerce'); ?></label>
<input type="text" class="input-text" name="billing_company" id="reg_billing_company" value="<?php echo esc_attr(!empty($_POST['billing_company']) ? $_POST['billing_company'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_address_1"><?php esc_html_e('Address Line 1', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_address_1" id="reg_billing_address_1" value="<?php echo esc_attr(!empty($_POST['billing_address_1']) ? $_POST['billing_address_1'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_address_2"><?php esc_html_e('Address Line 2', 'woocommerce'); ?></label>
<input type="text" class="input-text" name="billing_address_2" id="reg_billing_address_2" value="<?php echo esc_attr(!empty($_POST['billing_address_2']) ? $_POST['billing_address_2'] : ''); ?>" />
</p>
<p class="form-row form-row-first">
<label for="reg_billing_city"><?php esc_html_e('City', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_city" id="reg_billing_city" value="<?php echo esc_attr(!empty($_POST['billing_city']) ? $_POST['billing_city'] : ''); ?>" />
</p>
<p class="form-row form-row-last">
<label for="reg_billing_state"><?php esc_html_e('State/Province', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_state" id="reg_billing_state" value="<?php echo esc_attr(!empty($_POST['billing_state']) ? $_POST['billing_state'] : ''); ?>" />
</p>
<p class="form-row form-row-first">
<label for="reg_billing_postcode"><?php esc_html_e('Postcode', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_postcode" id="reg_billing_postcode" value="<?php echo esc_attr(!empty($_POST['billing_postcode']) ? $_POST['billing_postcode'] : ''); ?>" />
</p>
<p class="form-row form-row-last">
<label for="reg_billing_phone"><?php esc_html_e('Phone', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php echo esc_attr(!empty($_POST['billing_phone']) ? $_POST['billing_phone'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_cf"><?php esc_html_e('Codice Fiscale', 'woocommerce'); ?></label>
<input type="text" class="input-text" name="billing_cf" id="reg_billing_cf" value="<?php echo esc_attr(!empty($_POST['billing_cf']) ? $_POST['billing_cf'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_piva"><?php esc_html_e('Partita IVA', 'woocommerce'); ?></label>
<input type="text" class="input-text" name="billing_piva" id="reg_billing_piva" value="<?php echo esc_attr(!empty($_POST['billing_piva']) ? $_POST['billing_piva'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_pec"><?php esc_html_e('PEC', 'woocommerce'); ?></label>
<input type="email" class="input-text" name="billing_pec" id="reg_billing_pec" value="<?php echo esc_attr(!empty($_POST['billing_pec']) ? $_POST['billing_pec'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_billing_sdi"><?php esc_html_e('Codice SDI', 'woocommerce'); ?></label>
<input type="text" class="input-text" name="billing_sdi" id="reg_billing_sdi" value="<?php echo esc_attr(!empty($_POST['billing_sdi']) ? $_POST['billing_sdi'] : ''); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="reg_order_comments"><?php esc_html_e('Order Notes', 'woocommerce'); ?></label>
<textarea name="order_comments" id="reg_order_comments" class="input-text"><?php echo esc_textarea(!empty($_POST['order_comments']) ? $_POST['order_comments'] : ''); ?></textarea>
</p>
<p class="form-row form-row-wide">
<label for="reg_privacy_checkbox">
<input type="checkbox" name="privacy_checkbox" id="reg_privacy_checkbox" value="1" <?php checked(!empty($_POST['privacy_checkbox']), true); ?> />
<?php esc_html_e('Privacy trattamento dati personali', 'woocommerce'); ?> <span class="required">*</span>
</label>
</p>
<div class="clear"></div>
<?php
});
// Convalida dei campi personalizzati
add_action('woocommerce_register_post', function($username, $email, $validation_errors) {
if (empty($_POST['billing_first_name'])) {
$validation_errors->add('billing_first_name_error', __('First name is required!', 'woocommerce'));
}
if (empty($_POST['billing_last_name'])) {
$validation_errors->add('billing_last_name_error', __('Last name is required!', 'woocommerce'));
}
if (empty($_POST['billing_address_1'])) {
$validation_errors->add('billing_address_1_error', __('Address Line 1 is required!', 'woocommerce'));
}
if (empty($_POST['billing_city'])) {
$validation_errors->add('billing_city_error', __('City is required!', 'woocommerce'));
}
if (empty($_POST['billing_state'])) {
$validation_errors->add('billing_state_error', __('State/Province is required!', 'woocommerce'));
}
if (empty($_POST['billing_postcode'])) {
$validation_errors->add('billing_postcode_error', __('Postcode is required!', 'woocommerce'));
}
if (empty($_POST['billing_phone'])) {
$validation_errors->add('billing_phone_error', __('Phone is required!', 'woocommerce'));
}
if (empty($_POST['privacy_checkbox'])) {
$validation_errors->add('privacy_checkbox_error', __('You must accept the Privacy trattamento dati personali!', 'woocommerce'));
}
}, 10, 3);
// Salva i campi personalizzati nel database
add_action('woocommerce_created_customer', function($customer_id) {
$fields = [
'billing_first_name',
'billing_last_name',
'billing_company',
'billing_address_1',
'billing_address_2',
'billing_city',
'billing_state',
'billing_postcode',
'billing_phone',
'billing_cf',
'billing_piva',
'billing_pec',
'billing_sdi',
'order_comments'
];
foreach ($fields as $field) {
if (isset($_POST[$field])) {
update_user_meta($customer_id, $field, sanitize_text_field($_POST[$field]));
}
}
// Invia email all'amministratore
$admin_email = get_option('admin_email');
$first_name = sanitize_text_field($_POST['billing_first_name']);
$last_name = sanitize_text_field($_POST['billing_last_name']);
$user_email = get_userdata($customer_id)->user_email;
$email_content = "";
foreach ($fields as $field) {
if (!empty($_POST[$field])) {
$email_content .= ucfirst(str_replace('_', ' ', $field)) . ": " . sanitize_text_field($_POST[$field]) . "\n";
}
}
wp_mail($admin_email, __('New Customer Registration', 'woocommerce'), sprintf(
__('New customer registered:
%s', 'woocommerce'),
$email_content
));
});
Il codice naturalmente deve essere personalizzato con il nome corretto dei campi e il codice va inserito all’interno della “function.php” del tema child.
Il codice è molto semplice e può essere anche un’occasione per apprendere il funzionamento del linguaggio PHP. In basso il risultato finale.

Se hai dubbi o vuoi approfondire l’argomento, contattami per una sessione di orientamento gratuita. Il mio ruolo è quello di consulente web: affianco imprenditori, freelance e webmaster per aiutarli a usare gli strumenti digitali in modo strategico ed efficace. Posso guidarti passo dopo passo come un coach, durante l’esercizio del tuo lavoro sul sito e in tutta la comunicazione digitale: insieme possiamo trovare la soluzione più adatta alle tue esigenze reali, senza perdere tempo ed energie. Non sei solo!
🚀 Come funziona il mio metodo

1️⃣ Sessione di orientamento gratuita iniziale
Analizziamo insieme il tuo sito, la tua comunicazione online i tuoi obiettivi. Le tue esigenze personali nella comunicazione online. Durante questa sessione affronteremo anche tutti gli altri argomenti tecnici sulle modalità di erogazione delle lezioni online.
2️⃣ Corso personalizzato (5 lezioni live)
Ti insegno a usare il CMS più adatto (WordPress o Drupal), ti spiego come impostare la tua comunicazione web e social e ti aiuto a integrare l’uso dell’Intelligenza Artificiale. Analisi e soluzioni a problemi pratici…affiancamento costante.
3️⃣ Risultati concreti
Alla fine del percorso sarai in grado di gestire il tuo sito web, creare contenuti efficaci e costruire una strategia online solida e duratura.
