[Tutorial] Come fare un importer personalizzato per WooCommerce

Spesso capita di dover importare in WordPress (come custom post type) o in WooCommerce dei prodotti presi da fonti esterne, come le API di un gestionale aziendale o un catalogo.

Ogni fonte dati è diversa; può esserlo nel formato o nella struttura delle informazioni, e i dati possono essere, a loro volta, importati in strutture diverse.

Struttura di un importer generico

Ogni importer è diverso, ma in linea di massima, un importer dovrà prendere in ingresso i dati da importare, li dovrà interpretare e adattare, e poi li dovrà inserire nella nuova struttura dati, quindi gli elementi che lo compongono saranno simili. Io ne ho identificati 3 generici: Read, Business Logic, Save.

Read: elemento che dialoga con la fonte dati

Effettua la connessione ad una fonte dati nel formato in cui i dati sono espressi, quindi un DB, un file con un formato che potrebbe essere l’XML, il pipe-separeted o il fixed-width (mi è capitato, soprattutto in passato, spero non lo usi più nessuno!) un CSV, un’API in JSON o altro.

Oltre al formato nel quale i dati sono espressi, altro elemento importante è la struttura degli stessi: possono infatti essere destrutturati come in un database NoSQL, strutturati come nei database relazionali, possono essere costituiti da più fonti o necessitare di un arricchimento con logiche successive.

Il tempo di sviluppo di questa parte dipende molto dal formato dei dati e dalla modalità con la quale vengono messi a disposizione.

Business Logic: elemento che valuta e adatta

Una volta creato un connettore per leggere i dati, di solito è utile normalizzare e arricchire in base alla logica stabilita dall’analisi. Ad esempio, un campo stringa “Categoria” potrebbe essere utilizzato per impostare automaticamente la categoria in WordPress.

Oppure nella fonte dati potrebbero essere presenti più immagini con le quali impostare la Featured Image e una gallery; alcune informazioni potrebbero essere inutili e filtrate, oppure combinate fra di loro per creare campi descrittivi.

Save: elemento che inserisce i prodotti nel database

Una volta che il pacchetto dati è letto e normalizzato, andrà inserito nel database. Il nuovo database potrà coincidere con l’area dati di WooCommerce, con un Custom post type, con una o più tabelle create completamente da zero (che legheremo alla wp_posts attraverso l’ID) in campi descrittivi e in post_meta personalizzati, o con un mix di tutti questi elementi.

Molto utile la funzionalità per eseguire il rollback dell’importazione nel caso in cui dovesse essere andata male o per qualsiasi motivo, cioè il bottone per eliminare tutti i prodotti importati, i dati eventualmente inseriti in tabelle esterne e le immagini caricate.


Con queste caratteristiche sono stati realizzati diversi importer negli anni; in particolare un plugin per WordPress scritto da zero e che personalizzo per ogni progetto

  • scarica l’XML dal feed salvandolo in un file XML all’interno di una cartella di log
  • legge l’XML dal file ed effettua un cast delle variabili al fine di inserirle nel database come “Prodotto WooCommerce”, come “Articolo WordPress” o come un Custom Post Type
  • Imposta le categorie adeguate e quando non esistono le crea in automatico associando l’articolo
  • Scarica le immagini e le converte in allegati di WordPress, assegnandole come featured image o come gallery (aggiornamento: dato che questo step era particolarmente oneroso in termini di calcolo macchina, ho realizzato un altro webservice che viene chiamato dopo aver importato tutti i prodotti e che si occupa specificatamente della fase di caricamento e conversione delle immagini)


Questo sito web non offre alcun cookie perchè non ho interesse a tracciare le attività di nessun utente attraverso i cookie e quindi non ne ho inseriti.
Il tema e i plugin sono realizzati da me e quindi nessun altro è autorizzato ad inserire cookie su questo sito web.
Se qualcuno dovesse individuare un cookie da qualche parte su questo sito web, non ce l'ho messo io,
ed è pregato di farmelo sapere, così potrò cercare e distruggere il cookie eventualmente individuato.
I software e i pezzi di codice condivisi su questo sito web sono da considerarsi a scopo educativo e senza alcuna garanzia
© 2021