[{"data":1,"prerenderedAt":1098},["ShallowReactive",2],{"tag-wordpress":3},[4,194,419,610,787,985],{"id":5,"title":6,"body":7,"categories":174,"coverImage":177,"date":178,"description":179,"extension":180,"meta":181,"navigation":182,"path":183,"seo":184,"stem":185,"sticky":186,"tags":187,"__hash__":193},"articles/il-cms-in-c-che-non-ho-mai-scritto.md","Il CMS in C che non ho mai scritto",{"type":8,"value":9,"toc":167},"minimark",[10,17,22,30,44,50,53,58,65,68,72,79,104,107,114,117,119,123,134,140,146,151,156,159,162],[11,12,13],"p",{},[14,15,16],"em",{},"Nel 2015 valevi quanto il linguaggio che usavi. Questa è la storia di come ho ignorato quella regola e cosa è successo dopo.",[18,19,21],"h2",{"id":20},"la-scelta","La scelta",[11,23,24,25,29],{},"Nel 2015 ho passato qualche giorno a considerare seriamente di ",[26,27,28],"strong",{},"scrivere un CMS da zero in C",".",[11,31,32,33,36,37,40,41,29],{},"Non era follia pura (certo, ci si avvicinava eh). Volendo, avrei avuto le competenze per farlo. Il problema era un altro: nel mondo dev di quegli anni ",[26,34,35],{},"valevi quanto il linguaggio che usavi",".\nNella narrativa da ",[14,38,39],{},"street credibility"," del tempo, più il linguaggio aveva una curva di apprendimento alto e più eri forte. C, di certo, era rispettabilità. PHP o JavaScript roba da pivelli. ",[26,42,43],{},"WordPress non ne parliamo proprio",[11,45,46,47,29],{},"Poi ho detto: ",[14,48,49],{},"naaaaaaaaaaaaah",[11,51,52],{},"Dovevo costruire una piattaforma per la vendita di fumetti digitali. Utenti, contenuti, pagamenti, file protetti da download. Da solo, con poco budget che volevo però destinato a fornire a me e il mio socio non-tech un posto in cui dormire\ne coprire le spese necessarie a portare i primi contratti. Deadline vita o morte: 6 mesi per partecipare a un investor day presentando non solo l'app ma già dei risultati contati per numero di utenti.",[11,54,55],{},[26,56,57],{},"Ho preso WordPress e l'ho piegato a quello che mi serviva.",[11,59,60,61,64],{},"Non perché fosse la scelta più figa. Ma perché ",[26,62,63],{},"conoscevo quella codebase a memoria",". Sapevo come si comportava sotto carico, dove tendeva a rompersi, come estenderla. E soprattutto sapevo dove guardare quando qualcosa andava storto alle 2 di notte — cosa che succede sempre, invariabilmente, al momento peggiore.",[11,66,67],{},"Un CMS in C avrei ancora finito di scriverlo adesso.",[18,69,71],{"id":70},"quello-che-è-uscito-fuori","Quello che è uscito fuori",[11,73,74,75,78],{},"In sei mesi, team di sviluppo, UI, UX, DevOps composto da... ",[26,76,77],{},"soltanto me",":",[80,81,82,86,89,92,98,101],"ul",{},[83,84,85],"li",{},"Backend della piattaforma",[83,87,88],{},"API REST per l'app mobile",[83,90,91],{},"App iOS",[83,93,94,95],{},"Sistema di cifratura a chiave asincrona per la protezione dei file, ",[26,96,97],{},"registrato SIAE",[83,99,100],{},"Infrastruttura su due macchine sincronizzate con load balancer, gestita con Ansible",[83,102,103],{},"HHVM per la compilazione jit di php, visto che certo PHP 8 non esisteva ancora",[11,105,106],{},"Il back office era \"gratis\", e il solito WordPress che tutti gli interni sapevano già usare. Praticamente zero onboarding: lo usava chiunque dovesse usarlo, senza aprire un ticket.",[11,108,109,110,113],{},"Prima settimana dal lancio: 9.000 signup. ",[26,111,112],{},"app del mese su App Store Italia",". 400k raccolti dagli investitori.",[115,116],"hr",{},[115,118],{},[18,120,122],{"id":121},"il-punto","Il punto",[11,124,125,126,129,130,133],{},"C'è una differenza tra ",[26,127,128],{},"non conoscere le alternative"," e ",[26,131,132],{},"conoscerle tutte e scegliere quella che funziona"," nel contesto e coi vincoli reali.",[11,135,136,137,29],{},"Il rischio non è \"devo imparare la sintassi\" o \"l'eleganza della soluzione\". È che ",[26,138,139],{},"non conosci ancora i failure mode",[11,141,142,143,29],{},"È come scegliere tra andare in gara con una 500 che guidi da 10 anni — sai che la terza gratta un po', quanti newton applicare allo sterzo, come frena sul bagnato — oppure con un veicolo di ultima generazione che si pilota usando il ",[26,144,145],{},"pronzione",[11,147,148],{},[26,149,150],{},"Tu dirai: ma che è il pronzione?",[11,152,153],{},[26,154,155],{},"Esatto.",[11,157,158],{},"Ed è proprio questo il problema. Con lo stack nuovo stai debuggando nel buio alle 2 di notte qualcosa per cui non hai ancora un nome.",[11,160,161],{},"Il CMS in C sarebbe stato figo da raccontare ai meetup.",[11,163,164],{},[26,165,166],{},"I 9.000 signup erano meglio.",{"title":168,"searchDepth":169,"depth":169,"links":170},"",2,[171,172,173],{"id":20,"depth":169,"text":21},{"id":70,"depth":169,"text":71},{"id":121,"depth":169,"text":122},[175,176],"Dev","Startup","https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/la-500-che-vinceva.png","2026-03-28T10:00:00.000Z","Nel 2015 avrei potuto scrivere un CMS in C. Ho scelto WordPress. Sei mesi dopo avevo 9.000 signup, app del mese su App Store Italia e 400k raccolti dagli investitori. Team di sviluppo: io.","md",{},true,"/il-cms-in-c-che-non-ho-mai-scritto",{"title":6,"description":179},"il-cms-in-c-che-non-ho-mai-scritto",false,[188,189,190,191,192],"wordpress","startup","engineering","indie","build-in-public","Q99QWwKOb-D7xX75KyiaDlui2yrSzAfsnqC1ps5KQv0",{"id":195,"title":196,"body":197,"categories":403,"coverImage":405,"date":406,"description":407,"extension":180,"meta":408,"navigation":182,"path":409,"seo":410,"stem":411,"sticky":182,"tags":412,"__hash__":418},"articles/otto-anni-dopo-dallarchitettura-wordpress-al-boom-dei-siti-headless.md","Otto anni dopo: dall’architettura WordPress al boom dei siti headless",{"type":8,"value":198,"toc":394},[199,212,222,226,243,248,268,271,275,280,300,303,307,310,363,367,374,385],[11,200,201,202,211],{},"Nel 2016, al Meetup WordPress di Roma, parlavo di ",[203,204,208],"a",{"href":205,"rel":206},"https://blog.enricodeleo.com/modern-gentlemens-wordpress-un-nuovo-approccio-al-web",[207],"nofollow",[26,209,210],{},"“Modern Gentlemen’s WordPress”",", un approccio metodico e strutturato per creare applicazioni WordPress mantenibili e performanti. Guardando indietro, quel talk fu una riflessione sullo stato dell’arte e una guida per affrontare il caos di plugin, temi pesanti e customizzazione spesso inefficiente.",[11,213,214,215,129,218,221],{},"Oggi, a distanza di otto anni, il panorama dello sviluppo web è radicalmente cambiato. Le parole chiave del 2024 sono ",[26,216,217],{},"headless CMS",[26,219,220],{},"frontend moderni",", con framework come Nuxt3 che dominano la scena. In questa retrospettiva, voglio analizzare cosa è cambiato e come WordPress continui a essere rilevante, ma in modi completamente nuovi.",[18,223,225],{"id":224},"il-passaggio-allheadless-cms","Il passaggio all'headless CMS",[11,227,228,229,231,232,235,236,239,240,29],{},"Se nel 2016 WordPress era prevalentemente utilizzato come piattaforma monolitica, oggi si sta affermando sempre più come ",[26,230,217],{},". Questo approccio separa completamente il backend dal frontend: WordPress si occupa di gestire contenuti e API, mentre il frontend viene sviluppato con tecnologie come ",[26,233,234],{},"Nuxt3",", ",[26,237,238],{},"React",", o ",[26,241,242],{},"Next.js",[244,245,247],"h3",{"id":246},"perché-scegliere-unarchitettura-headless","Perché scegliere un'architettura headless?",[80,249,250,256,262],{},[83,251,252,255],{},[26,253,254],{},"Performance superiore",": Caricamenti più rapidi grazie a frontend ottimizzati per il rendering statico o server-side.",[83,257,258,261],{},[26,259,260],{},"Flessibilità",": Il backend WordPress può alimentare diverse piattaforme (sito web, app mobile, chatbot).",[83,263,264,267],{},[26,265,266],{},"Esperienza utente avanzata",": Un frontend moderno permette di implementare interfacce altamente interattive e dinamiche.",[11,269,270],{},"WordPress, con la sua API REST nativa e GraphQL tramite plugin come WPGraphQL, si adatta perfettamente a questo paradigma. Il tuo contenuto rimane centralizzato, ma puoi costruire esperienze utente al passo con le aspettative del 2024.",[18,272,274],{"id":273},"perché-nuxt3-è-il-frontend-ideale","Perché Nuxt3 è il frontend ideale",[11,276,277,279],{},[26,278,234],{},", basato su Vue 3, si è affermato come una delle soluzioni più robuste per lo sviluppo di frontend headless. Rispetto al Nuxt2 del 2016, questa nuova versione offre:",[80,281,282,288,294],{},[83,283,284,287],{},[26,285,286],{},"Prestazioni migliorate",", grazie a Vue 3 e Vite per il bundling.",[83,289,290,293],{},[26,291,292],{},"Supporto nativo per il rendering universale",", fondamentale per SEO e performance.",[83,295,296,299],{},[26,297,298],{},"Modularità e scalabilità",", con un ecosistema che facilita l’integrazione con CMS, autenticazione e servizi cloud.",[11,301,302],{},"Con Nuxt3, puoi costruire siti che combinano il meglio del rendering statico (SSG) e server-side (SSR). Questo lo rende perfetto per e-commerce, blog e applicazioni web avanzate.",[18,304,306],{"id":305},"come-coniugare-wordpress-e-nuxt3","Come coniugare WordPress e Nuxt3",[11,308,309],{},"Ecco una roadmap per implementare un sito headless con WordPress e Nuxt3:",[311,312,313,330,346],"ol",{},[83,314,315,78,318],{},[26,316,317],{},"Preparare WordPress come CMS headless",[80,319,320,327],{},[83,321,322,323,326],{},"Utilizza ",[26,324,325],{},"WPGraphQL"," o la REST API per esporre i dati.",[83,328,329],{},"Ottimizza WordPress per funzionare come API server (disabilita temi e plugin non necessari).",[83,331,332,78,335],{},[26,333,334],{},"Costruire il frontend con Nuxt3",[80,336,337,340,343],{},[83,338,339],{},"Configura un’app Nuxt3 per consumare l’API di WordPress.",[83,341,342],{},"Implementa il rendering universale per ottenere un’ottima indicizzazione e prestazioni.",[83,344,345],{},"Integra strumenti moderni per immagini (Nuxt Image) e analytics.",[83,347,348,78,351],{},[26,349,350],{},"Deployment",[80,352,353],{},[83,354,355,356,235,359,362],{},"Sfrutta piattaforme moderne come ",[26,357,358],{},"Vercel",[26,360,361],{},"Netlify",", o container su cloud per una distribuzione rapida.",[18,364,366],{"id":365},"conclusioni","Conclusioni",[11,368,369,370,373],{},"Dal 2016 a oggi, la filosofia “Modern Gentlemen” ha trovato una sua naturale evoluzione. Oggi non si tratta solo di costruire applicazioni ben strutturate, ma di ",[26,371,372],{},"connettere i migliori strumenti disponibili"," per offrire esperienze utente eccezionali. Nuxt3 e l’approccio headless sono un esempio lampante di come possiamo adattarci a un web sempre più dinamico.",[11,375,376,377,384],{},"Se vuoi approfondire questo approccio, ti invito a esplorare il mio boilerplate open source ",[26,378,379],{},[203,380,383],{"href":381,"rel":382},"https://github.com/enricodeleo/wpacked",[207],"wpacked",", che rimane una solida base per chi vuole iniziare a lavorare con WordPress in maniera moderna.",[11,386,387,388,393],{},"Hai provato a creare un sito headless con WordPress e Nuxt3? Parliamone nei commenti o scrivimi ",[203,389,392],{"href":390,"rel":391},"https://www.linkedin.com/in/enricodeleo",[207],"su LinkedIn",". Sarebbe interessante confrontarci sulle sfide e sulle opportunità che questa architettura porta nel 2024.",{"title":168,"searchDepth":169,"depth":169,"links":395},[396,400,401,402],{"id":224,"depth":169,"text":225,"children":397},[398],{"id":246,"depth":399,"text":247},3,{"id":273,"depth":169,"text":274},{"id":305,"depth":169,"text":306},{"id":365,"depth":169,"text":366},[404],"dev","https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/otto-anni-dopo-dallarchitettura-wordpress-al-boom-dei-siti-headles.jpg","2024-12-11T12:00:00.000Z","Una retrospettiva sull'evoluzione delle applicazioni WordPress dal 2016 al 2024 e la rivoluzione dei siti headless con Nuxt3.",{},"/otto-anni-dopo-dallarchitettura-wordpress-al-boom-dei-siti-headless",{"title":196,"description":407},"otto-anni-dopo-dallarchitettura-wordpress-al-boom-dei-siti-headless",[188,413,414,415,416,417],"nuxt3","headless","vue3","frontend","cms","tzHRnbi4BAHubpIahh1b0Mmoc57Fdi72dWvb8ayO_fo",{"id":420,"title":421,"body":422,"categories":595,"coverImage":597,"date":598,"description":599,"extension":180,"meta":600,"navigation":182,"path":601,"seo":602,"stem":603,"sticky":182,"tags":604,"__hash__":609},"articles/woocommerce-agos-payment-gateway-integra-pagamenti-rateali-nel-tuo-e-commerce.md","WooCommerce Agos Payment Gateway: Integra pagamenti rateali nel tuo e-commerce",{"type":8,"value":423,"toc":582},[424,431,435,438,464,468,471,475,501,505,525,529,532,536,540,543,554,558,561,569,571,574],[11,425,426,427,430],{},"Nel panorama dell'e-commerce italiano, offrire opzioni di pagamento flessibili è diventato un fattore critico per il successo. I clienti cercano sempre più spesso la possibilità di dilazionare i pagamenti, specialmente per acquisti di importo significativo. È con questa consapevolezza che ho sviluppato il ",[26,428,429],{},"WooCommerce Agos Payment Gateway",", un plugin che integra perfettamente i finanziamenti Agos nel tuo store WooCommerce.",[18,432,434],{"id":433},"perché-integrare-pagamenti-rateali-nel-tuo-e-commerce","Perché integrare pagamenti rateali nel tuo e-commerce?",[11,436,437],{},"L'implementazione di pagamenti rateali può avere un impatto significativo sul tuo business:",[80,439,440,446,452,458],{},[83,441,442,445],{},[26,443,444],{},"Aumento del valore medio ordine",": I clienti sono più propensi ad effettuare acquisti di importo maggiore quando possono dilazionare il pagamento",[83,447,448,451],{},[26,449,450],{},"Riduzione dell'abbandono del carrello",": Offrire opzioni di pagamento flessibili può essere decisivo per completare l'acquisto",[83,453,454,457],{},[26,455,456],{},"Competitività",": Allinearsi alle aspettative dei clienti che cercano sempre più spesso opzioni di finanziamento",[83,459,460,463],{},[26,461,462],{},"Professionalità",": Integrazione con un partner affidabile come Agos aumenta la credibilità del tuo store",[18,465,467],{"id":466},"caratteristiche-chiave-del-plugin","Caratteristiche chiave del plugin",[11,469,470],{},"Il WooCommerce Agos Payment Gateway è stato progettato pensando sia agli sviluppatori che ai merchant, offrendo:",[244,472,474],{"id":473},"per-i-merchant","Per i Merchant",[80,476,477,483,489,495],{},[83,478,479,482],{},[26,480,481],{},"Configurazione intuitiva",": Setup rapido con codici utente e convenzione forniti da Agos",[83,484,485,488],{},[26,486,487],{},"Tabelle finanziarie personalizzabili",": Definisci tassi di interesse e importi min/max per diverse opzioni di finanziamento",[83,490,491,494],{},[26,492,493],{},"Targeting preciso",": Applica le opzioni di finanziamento a specifici prodotti, categorie o brand",[83,496,497,500],{},[26,498,499],{},"Testing sicuro",": Modalità test per verificare l'integrazione prima del go-live",[244,502,504],{"id":503},"per-gli-sviluppatori","Per gli Sviluppatori",[80,506,507,513,519],{},[83,508,509,512],{},[26,510,511],{},"API robuste",": Integrazione completa con le API Agos",[83,514,515,518],{},[26,516,517],{},"Debug avanzato",": Sistema di logging dettagliato per troubleshooting efficace",[83,520,521,524],{},[26,522,523],{},"Codice pulito",": Sviluppato seguendo le best practice WordPress",[18,526,528],{"id":527},"configurazione-e-personalizzazione","Configurazione e personalizzazione",[11,530,531],{},"L'implementazione del gateway Agos è stata progettata per essere il più flessibile possibile. Ad esempio, permette di definire condizioni precise per l'applicabilità dei finanziamenti definendo tabelle finanziarie e loro applicazione per prodotto, categoria, brand. Questo garantisce che le opzioni di pagamento rateale siano disponibili solo quando appropriato.",[18,533,535],{"id":534},"casi-duso-reali","Casi d'uso reali",[244,537,539],{"id":538},"e-commerce-di-elettronica","E-commerce di Elettronica",[11,541,542],{},"Un negozio di elettronica ha implementato il plugin offrendo:",[80,544,545,548,551],{},[83,546,547],{},"Finanziamenti a tasso zero per acquisti sopra i 1000€",[83,549,550],{},"Tabelle finanziarie specifiche per brand premium",[83,552,553],{},"Risultato: +25% di conversione su ordini di alto valore",[18,555,557],{"id":556},"prezzi-e-supporto","Prezzi e supporto",[11,559,560],{},"Il plugin è disponibile con diversi piani di sottoscrizione per adattarsi alle tue esigenze e include sempre:",[80,562,563,566],{},[83,564,565],{},"Supporto tecnico dedicato",[83,567,568],{},"Aggiornamenti continui",[18,570,366],{"id":365},[11,572,573],{},"In un mercato e-commerce sempre più competitivo, offrire opzioni di pagamento flessibili non è più un optional. Il WooCommerce Agos Payment Gateway ti permette di implementare questa funzionalità in modo professionale e personalizzato, aiutandoti a convertire più visitatori in clienti.",[11,575,576,577,581],{},"Se vuoi saperne di più o sei interessato ad implementare il gateway Agos nel tuo store, ",[203,578,580],{"href":579},"mailto:hello@enricodeleo.com","contattami"," per una consulenza personalizzata.",{"title":168,"searchDepth":169,"depth":169,"links":583},[584,585,589,590,593,594],{"id":433,"depth":169,"text":434},{"id":466,"depth":169,"text":467,"children":586},[587,588],{"id":473,"depth":399,"text":474},{"id":503,"depth":399,"text":504},{"id":527,"depth":169,"text":528},{"id":534,"depth":169,"text":535,"children":591},[592],{"id":538,"depth":399,"text":539},{"id":556,"depth":169,"text":557},{"id":365,"depth":169,"text":366},[404,596],"ecommerce","https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/agos-woocommerce.jpg","2024-12-01T09:00:00.000Z","Come integrare pagamenti rateali Agos nel tuo store WooCommerce: una soluzione completa per aumentare le conversioni offrendo finanziamenti flessibili ai tuoi clienti",{},"/woocommerce-agos-payment-gateway-integra-pagamenti-rateali-nel-tuo-e-commerce",{"title":421,"description":599},"woocommerce-agos-payment-gateway-integra-pagamenti-rateali-nel-tuo-e-commerce",[188,605,606,596,607,608],"woocommerce","payments","agos","fintech","nfmyWGhltsf306fn6a-cjemJrlLsUU1yNTsLTtu_GOU",{"id":611,"title":612,"body":613,"categories":774,"coverImage":775,"date":776,"description":777,"extension":180,"meta":778,"navigation":182,"path":779,"seo":780,"stem":781,"sticky":186,"tags":782,"__hash__":786},"articles/migrare-da-magento-2-a-woocommerce-la-sfida-delle-password.md","Migrare da Magento 2 a WooCommerce: La Sfida delle Password",{"type":8,"value":614,"toc":764},[615,618,622,625,630,633,637,640,644,647,651,654,658,664,673,677,680,683,687,695,714,717,721,727,734,738,745,748,751,755],[11,616,617],{},"Mi sono imbattuto in una sfida interessante: creare un plugin per WordPress che permettesse una migrazione senza soluzione di continuità degli utenti da Magento 2 a WooCommerce. Sembra semplice, vero? Lo pensavo anche io, prima di rendermi conto che mi trovavo di fronte a un terreno inesplorato, senza una libreria, un plugin o una guida a cui fare riferimento. Lasciatemi spiegare.",[18,619,621],{"id":620},"woocommerce-vs-magento-perché-scegliere-woocommerce","WooCommerce vs Magento: perché scegliere WooCommerce?",[11,623,624],{},"Quando si tratta di scegliere una piattaforma di e-commerce, WooCommerce e Magento sono due dei nomi più popolari che vengono in mente. Entrambi offrono un'ampia gamma di funzionalità che possono aiutare a costruire un negozio online robusto. Tuttavia, ci sono diverse ragioni per cui potresti voler scegliere WooCommerce su Magento. Ecco alcuni dei vantaggi principali:",[626,627,629],"h4",{"id":628},"facilità-duso","Facilità d'uso",[11,631,632],{},"WooCommerce è noto per la sua facilità d'uso. È un plugin di WordPress, il che significa che si integra perfettamente con qualsiasi sito WordPress esistente. Se hai già familiarità con WordPress, allora imparare a usare WooCommerce sarà un gioco da ragazzi. Magento, d'altra parte, ha una curva di apprendimento più ripida e può essere più complicato da configurare e gestire.",[626,634,636],{"id":635},"flessibilità-e-personalizzazione","Flessibilità e personalizzazione",[11,638,639],{},"WooCommerce offre una grande flessibilità quando si tratta di personalizzare il tuo negozio. Ci sono migliaia di temi e plugin disponibili che ti permettono di aggiungere nuove funzionalità e cambiare l'aspetto del tuo negozio con facilità. Magento offre anche molte opzioni di personalizzazione, ma può richiedere più competenze tecniche per apportare modifiche significative.",[626,641,643],{"id":642},"costi","Costi",[11,645,646],{},"WooCommerce è un plugin gratuito, il che lo rende una scelta eccellente per le piccole imprese o per chi è alle prime armi con l'e-commerce. Anche se ci sono costi associati all'hosting del tuo sito e all'acquisto di temi o plugin premium, questi costi sono generalmente più bassi rispetto a quelli di Magento. Magento offre una versione gratuita (Magento Open Source), ma per accedere a tutte le funzionalità e al supporto dovrai optare per estensioni premium o a Magento Commerce, ad un costo significativo.",[626,648,650],{"id":649},"supporto-della-comunità","Supporto della comunità",[11,652,653],{},"Sia WooCommerce che Magento hanno comunità di sviluppatori attive, ma la comunità di WordPress (e quindi di WooCommerce) è molto più grande. Questo significa che è più facile trovare risorse, tutorial e soluzioni a problemi comuni con WooCommerce.",[18,655,657],{"id":656},"migrazione","Migrazione",[11,659,660,661,29],{},"Mentre Magento può essere una scelta eccellente per le grandi imprese che necessitano di una soluzione di e-commerce robusta, WooCommerce offre una soluzione più accessibile e user-friendly che è ",[26,662,663],{},"perfetta per le piccole imprese",[11,665,666,667,672],{},"Per questi motivi, talvolta le imprese di piccole dimensioni che hanno adottato Magento inizialmente, si trovano in difficoltà con costi e rigidità difficilmente sostenibili ed optano per un'attività di ",[26,668,669],{},[14,670,671],{},"replatforming"," per proseguire le vendite su WooCommerce.",[244,674,676],{"id":675},"i-vantaggi-di-una-transizione-fluida","I Vantaggi di una transizione fluida",[11,678,679],{},"Una delle principali preoccupazioni quando si migra da una piattaforma all'altra è la frizione percepita dall'utente finale, che potrebbe incidere negativamente sulle conversioni.",[11,681,682],{},"Se mantenere la struttura generale del sito ecommerce familiare (o addirittura identica) ed il catalogo intatto è ragionevolmente semplice, non lo è quando si tratta di autenticazione.",[244,684,686],{"id":685},"magento-2-e-wordpress-autenticazione-a-confronto","Magento 2 e WordPress: autenticazione a confronto",[11,688,689,690,694],{},"WordPress utilizza una tecnologia chiamata ",[691,692,693],"code",{},"phpass"," per l'hashing delle password. Si tratta di un framework di hashing delle password di dominio pubblico portatile per l'uso in applicazioni PHP.",[11,696,697,698,701,702,707,708,713],{},"Magento 2, d'altra parte, utilizza un algoritmo di hashing delle password più complesso. Da un lato infatti utilizza ",[691,699,700],{},"sodium"," (incluso in PHP dalla versione 7.2), dall'altro utilizza una tecnica chiamata ",[26,703,704],{},[14,705,706],{},"hash stretching"," per aumentare la sicurezza delle password hashate. Questo comporta l'hashing della password più volte (per di più con l'aggiunta di una stringa casuale detta ",[26,709,710],{},[14,711,712],{},"salt"," che ne aumenta ulteriormente la complessità).\nQuesto approccio rende il processo di hashing estremamente intensivo dal punto di vista computazionale, il che può aiutare a rallentare un attaccante che sta cercando di indovinare la password.",[11,715,716],{},"Questa sostanziale differenza nel processo di hashing delle password le rende incompatibili quando importate direttamente da Magento a WordPress e viceversa.",[244,718,720],{"id":719},"approcci-comuni","Approcci comuni",[11,722,723,724,29],{},"La soluzione più comune è quella di forzare il reset delle password degli utenti. Questo può essere un processo fastidioso per gli utenti e ",[26,725,726],{},"può portare a una perdita di traffico e di fiducia",[11,728,729,730,733],{},"Un'altra soluzione diffusa è quella di introdurre un meccanismo che verifichi la correttezza della password attraverso un login via API verso la vecchia piattaforma. Ciò però comporta la ",[26,731,732],{},"necessità di mantenere attiva ed accessibile a tempo indefinito la vecchia piattaforma",". Per di più in caso di down di quest'ultima il meccanismo fallirà.",[18,735,737],{"id":736},"la-mia-soluzione-insegnare-a-wordpress-come-comprendere-le-password-di-magento","La mia soluzione: insegnare a WordPress come comprendere le password di Magento",[11,739,740,741,744],{},"Dopo aver letto miriadi di articoli fuorvianti, ho deciso di sporcarmi le mani e di analizzare la classe ",[691,742,743],{},"Encryptor"," di Magento 2 per comprenderne a pieno l'algoritmo (e sì, avevo dapprima provato a\nchiedere a chatGPT4, con esito fallimentare). Da questo studio è scaturito un plugin WordPress leggerissimo che consente a WordPress di interpretare gli hash generati su Magento.",[11,746,747],{},"Il plugin si aggancia alla funzione di autenticazione di WordPress e verifica che l'hash importato dal database Magento 2 corrisponda alla password inserita, per poi eventualmente procedere\na creare un nuovo hash nativo di WordPress.",[11,749,750],{},"Gli utenti possono dunque effettuare il login su WordPress con le loro password Magento 2 esistenti, rendendo la transizione trasparente.",[18,752,754],{"id":753},"open-source","Open Source",[11,756,757,758,763],{},"In piena filosofia open source, e per contribuire ad ambedue le community ho deciso di rilasciare questo plugin sotto licenza GPL2 sia sul repository dei plugin di WordPresss che\nsu ",[203,759,762],{"href":760,"rel":761},"https://github.com/enricodeleo/wp-password-migration-magento/",[207],"GitHub"," per eventuali contribuzioni da parte di altri dev.",{"title":168,"searchDepth":169,"depth":169,"links":765},[766,767,772,773],{"id":620,"depth":169,"text":621},{"id":656,"depth":169,"text":657,"children":768},[769,770,771],{"id":675,"depth":399,"text":676},{"id":685,"depth":399,"text":686},{"id":719,"depth":399,"text":720},{"id":736,"depth":169,"text":737},{"id":753,"depth":169,"text":754},[175],"https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/migration.jpeg","2023-06-07T12:27:00.000Z","La vera sfida nel rendere fluida la migrazione tra Magento e WooCommerce (WordPress). Un viaggio nell'algoritmo di hashing delle password di Magento 2 e come ho risolto questo problema.",{},"/migrare-da-magento-2-a-woocommerce-la-sfida-delle-password",{"title":612,"description":777},"migrare-da-magento-2-a-woocommerce-la-sfida-delle-password",[783,784,188,785],"sviluppo","magento","plugin","XMglEILjloRo_HKiYFSPtAoSKKAZ5VdYivsFrsy_yFQ",{"id":788,"title":789,"body":790,"categories":971,"coverImage":972,"date":973,"description":974,"extension":180,"meta":975,"navigation":182,"path":976,"seo":977,"stem":978,"sticky":186,"tags":979,"__hash__":984},"articles/modern-gentlemens-wordpress-un-nuovo-approccio-al-web.md","Modern Gentlemen's WordPress: Come sviluppare applicazioni WordPress oggi (2016)",{"type":8,"value":791,"toc":959},[792,797,804,808,811,837,841,844,852,858,878,882,885,901,905,908,922,926,935,939,942,946,949],[11,793,794],{},[14,795,796],{},"Il 26 agosto 2016 ho presentato al Meetup WordPress di Roma il mio approccio allo sviluppo moderno e professionale di applicazioni WordPress. In questo articolo voglio condividere i punti chiave del mio intervento.",[11,798,799,800,803],{},"WordPress viene spesso celebrato per la sua installazione semplice e rapida, ma questa stessa caratteristica può indurre a pratiche di sviluppo approssimative. Con il talk ",[14,801,802],{},"Modern Gentlemen's WordPress",", ho voluto offrire una prospettiva alternativa: un metodo strutturato e scalabile per affrontare progetti WordPress con eleganza e professionalità.",[18,805,807],{"id":806},"perché-modernizzare-lo-sviluppo-wordpress","Perché modernizzare lo sviluppo WordPress?",[11,809,810],{},"La \"famosa installazione in 5 minuti\" non deve essere un pretesto per trascurare la qualità del codice. Al contrario, uno sviluppo professionale richiede:",[80,812,813,819,825,831],{},[83,814,815,818],{},[26,816,817],{},"Codice pulito e leggibile:"," seguire standard di codifica chiari per facilitare manutenzione e collaborazione.",[83,820,821,824],{},[26,822,823],{},"Scalabilità:"," strutturare i progetti per supportare futuri sviluppi senza difficoltà.",[83,826,827,830],{},[26,828,829],{},"Automazione:"," sfruttare strumenti che semplifichino il lavoro manuale.",[83,832,833,836],{},[26,834,835],{},"Deploy e gestione:"," garantire processi fluidi per il rilascio e l'aggiornamento delle applicazioni.",[18,838,840],{"id":839},"gli-strumenti-del-mestiere","Gli strumenti del mestiere",[11,842,843],{},"Durante il talk, ho illustrato strumenti e metodologie chiave per elevare lo sviluppo WordPress. Ecco una panoramica:",[244,845,847,848],{"id":846},"boilerplate-professionale-wpacked","Boilerplate professionale: ",[203,849,851],{"href":381,"rel":850},[207],"wPacked",[11,853,854,855,857],{},"Il mio boilerplate, ",[14,856,851],{},", è pensato per fornire una base robusta per progetti WordPress. Esso include:",[80,859,860,866,872],{},[83,861,862,865],{},[26,863,864],{},"Struttura modulare:"," organizza codice e asset in modo coerente.",[83,867,868,871],{},[26,869,870],{},"Supporto per Composer:"," gestione delle dipendenze semplificata.",[83,873,874,877],{},[26,875,876],{},"Compatibilità con moderni strumenti di build:"," come Webpack o Gulp per il processing di CSS e JavaScript.",[244,879,881],{"id":880},"versionamento-con-git","Versionamento con Git",[11,883,884],{},"Git è uno strumento indispensabile per tracciare modifiche, lavorare in team e mantenere un controllo preciso sullo stato del progetto. Consiglio di:",[80,886,887,898],{},[83,888,889,890,893,894,897],{},"Utilizzare un ",[691,891,892],{},".gitignore"," adeguato per escludere file inutili (es. ",[691,895,896],{},"wp-config.php"," o directory di cache).",[83,899,900],{},"Creare branch specifici per ogni funzionalità o bug fix.",[244,902,904],{"id":903},"local-development-con-vagrant-o-docker","Local Development con Vagrant o Docker",[11,906,907],{},"Ambienti di sviluppo locali come Vagrant o Docker permettono di replicare con precisione l'ambiente di produzione, evitando \"funziona solo sul mio computer\". Questi strumenti garantiscono:",[80,909,910,916],{},[83,911,912,915],{},[26,913,914],{},"Coerenza:"," ogni membro del team lavora sullo stesso setup.",[83,917,918,921],{},[26,919,920],{},"Portabilità:"," facilità di condivisione e replica dell'ambiente.",[244,923,925],{"id":924},"coding-standards","Coding Standards",[11,927,928,929,934],{},"Seguire gli standard ufficiali di WordPress (PHP, CSS, JavaScript) migliora la leggibilità e facilita il lavoro di squadra. Strumenti come ",[203,930,933],{"href":931,"rel":932},"https://github.com/squizlabs/PHP_CodeSniffer",[207],"PHP CodeSniffer"," possono essere configurati per verificare automaticamente il rispetto degli standard.",[244,936,938],{"id":937},"automazione-con-gulp-o-webpack","Automazione con Gulp o Webpack",[11,940,941],{},"Automatizzare processi come il minifying di CSS/JS, la gestione di immagini o la rigenerazione automatica del browser durante lo sviluppo rende il workflow più efficiente.",[18,943,945],{"id":944},"conclusione","Conclusione",[11,947,948],{},"La mia presentazione al Meetup WordPress di Roma aveva l'obiettivo di ispirare sviluppatori e team a vedere WordPress non come un CMS limitato, ma come una piattaforma capace di supportare applicazioni moderne e performanti, purché si adottino le giuste metodologie e strumenti.",[11,950,951,952,954,955,958],{},"Se vuoi approfondire, il boilerplate ",[14,953,851],{}," è disponibile su ",[203,956,762],{"href":381,"rel":957},[207],". Fammi sapere cosa ne pensi o se hai suggerimenti nei commenti o sui miei canali social!",{"title":168,"searchDepth":169,"depth":169,"links":960},[961,962,970],{"id":806,"depth":169,"text":807},{"id":839,"depth":169,"text":840,"children":963},[964,966,967,968,969],{"id":846,"depth":399,"text":965},"Boilerplate professionale: wPacked",{"id":880,"depth":399,"text":881},{"id":903,"depth":399,"text":904},{"id":924,"depth":399,"text":925},{"id":937,"depth":399,"text":938},{"id":944,"depth":169,"text":945},[404],"https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/modern-gentlemens-wordpress-un-nuovo-approccio-al-web.jpg","2016-08-26T00:00:00.000Z","Una panoramica delle migliori pratiche per lo sviluppo di applicazioni WordPress, basata sul talk presentato al WordPress Meetup di Roma nel 2016.",{},"/modern-gentlemens-wordpress-un-nuovo-approccio-al-web",{"title":789,"description":974},"modern-gentlemens-wordpress-un-nuovo-approccio-al-web",[188,980,981,982,983,383],"development","boilerplate","php","git","qBTrvlqr6V3hPvvw6cggdtjGN_idZwZjKqud_FXJrj4",{"id":986,"title":987,"body":988,"categories":1082,"coverImage":1084,"date":1085,"description":168,"extension":180,"meta":1086,"navigation":182,"path":1087,"seo":1088,"stem":1089,"sticky":186,"tags":1090,"__hash__":1097},"articles/terminato-il-nuovo-sito-dellaia-agrigento.md","Terminato il nuovo sito dell'AIA Agrigento",{"type":8,"value":989,"toc":1080},[990,1002,1005,1008,1015,1018,1021,1038,1047,1060,1067,1077],[11,991,992,993],{},"Finalmente ho terminato il nuovo sito internet dell'",[14,994,995,29],{},[26,996,997],{},[203,998,1001],{"href":999,"rel":1000},"http://www.aia-agrigento.it/sito/",[207],"Associazione Italiana Arbitri Sezione di Agrigento",[11,1003,1004],{},"Questa commissione, presa grazie al mio amico, compaesano e promettente arbitro Peppe è stata un toccasana per le mie finanze, e speriamo anche lo sia per un po' di visibilità nell'Agrigentino.",[11,1006,1007],{},"Come al solito mi sono sbizzarrito a manipolare WordPress per ottenere il risultato finale che è stato questo:",[11,1009,1010],{},[1011,1012],"img",{"alt":168,"src":1013,"title":1014},"https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/uploads/2010/12/Schermata-2010-12-02-a-17.06.23-1024x594.png","aia agrigento",[11,1016,1017],{},"Ovviamente dato il ruolo istituzionale del sito non mi sono potuto sbizzarrire in chissà-che-voli-pindarici, ma alla fine il committente era contento e questo (ahimè) è quello che conta.",[11,1019,1020],{},"Anche l'hosting del quale si sono serviti (Hostek) non era proprio dalla mia parte: la configurazione dei server è troppo restrittiva e non è compatibile con molti script php che utilizzo solitamente. Le pagine non vengono rese utilizzando come codifica l'utf-8 (cosa che ho dovuto ottenere specificandola manualmente nel codice) e la gestione del database è obbrobriosa.",[11,1022,1023,1024,1027,1028,1031,1032,1037],{},"Certo qualche piccola ",[14,1025,1026],{},"finezza"," me la sono concessa, come ad esempio il widget dedicato alle ",[26,1029,1030],{},"previsioni del tempo",", che ho ottenuto con un po' di fatica utilizzando le api di ",[203,1033,1036],{"href":1034,"rel":1035},"http://it.meteo.yahoo.com/italia/sicilia/agrigento-709859/",[207],"Yahoo! meteo"," miste ad un po' di css ed a qualche icona png.",[11,1039,1040,1041,1046],{},"Considerando ",[203,1042,1045],{"href":1043,"rel":1044},"http://www.aia-agrigento.it/v23/",[207],"la versione precedente di questo sito"," mi sembra un bel salto di qualità, no?",[11,1048,1049,1050,1055,1056,1059],{},"C'è da dire che gran parte del lavoro sul vecchio sito era stato fatto direttamente dal presidente della sezione, che ovviamente è più avvezzo all'arbitraggio che al php+html+css per cui lode e meriti a lui che ci ha saputo fare nonostante non fosse del mestiere. La cosa ben più tragica, invece, è che il ",[203,1051,1054],{"href":1052,"rel":1053},"http://www.aia-figc.it/",[207],"sito nazionale è altrettanto démodé",". Per cui miei cari dirigenti AIA... ",[26,1057,1058],{},"chiamatemi","!",[11,1061,1062,1063,1066],{},"A scopo ",[14,1064,1065],{},"puramente illustrativo"," beccatevi anche il mockup che avevo proposto prima che mi fossero richieste le modifiche che poi hanno portato alla versione definitiva :)",[11,1068,1069],{},[203,1070,1073],{"href":1071,"rel":1072},"http://fav.me/d2zhg66",[207],[1011,1074],{"alt":168,"src":1075,"title":1076},"https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/mockup_v2_aia_agrigento_by_lysergicstudio-d2zhg66.jpg","mockup aia",[11,1078,1079],{},"Mi piaceva proprio quest'erbetta di sfondo... Ma pazienza sarà per un'altra volta :)",{"title":168,"searchDepth":169,"depth":169,"links":1081},[],[1083],"design",null,"2010-12-02T16:20:42.000Z",{},"/terminato-il-nuovo-sito-dellaia-agrigento",{"title":987,"description":168},"terminato-il-nuovo-sito-dellaia-agrigento",[1091,1092,1093,1094,1095,1096,188],"agrigento","arbitri","lavoro","restyle","sito","web-design","OU4NJgJZ84LcDG7B2dUKAz85LiuB2SA2yu39S1yh-DU",1780867863687]