WordPress: Roadmap developer

Tabella dei contenuti:

Introduzione

Questa guida è frutto della mia esperienza che parte come PHP come linguaggio di programmazione, quindi pensata per poter capire come è strutturato Worpdress (da qui in poi lo chiamo WP) e quindi poter customizzare il sito web con il codice, quindi oltre a usufruire di quello si può installare.

Struttura delle cartelle

Quando si installa WP, si noteranno una serie di cartelle e file.
Per iniziare i file principali che si trovano sono i seguenti:

index.php
Questo è il punto di partenza, dove passano tutte le richieste del utente

wp-content.php
In questo file si trovano i principali parametri che servono a WP per lavorare, come per esempio le informazioni per accedere al Database o per inviare al SMTP server le email da spedire.

wp-content
In questa cartella sono presenti quasi tutti i file che installiamo successivamente, all’interno ci sono altre cartelle tipo:

wp-content/themes
In questa cartella, per ogni tema che si installa si trova una cartella con il nome del tema.

wp-content/plugins
In questa ogni cartella, simile per i temi, rappresenta un plugins

wp-content/uploads
In questa cartella si trovano tutti i file che si caricano sul sito, generamente divisi per anno e mese, in modo che sia più facile ritrovarli.
Le immagini, per ottimizzarle la visualizzazione, si trovano duplicate con dimensioni diverse per le diverse esigenze, per esempio più piccole per farle mostrare soltanto come miniature

Qui un elenco più completo Beginner’s Guide to WordPress File and Directory Structure

Temi e Frontend

I temi sono principalmente solo la parte grafica, anche se ci sono parti logiche, di solito i temi che implementano funzioni logiche (come i CPT che ci saranno in seguito) viene estenalizzato creando il plugin relativo.

Child theme

Quando si vuole customizzare un tema, per evitare che venga sovrascritto quando viene effettuato l’aggiornamento, viene creata una nuova cartella con il seguente nome: `{nome-tema-genitore}-child`.

Qui la guida completa: https://developer.wordpress.org/themes/advanced-topics/child-themes/

I file che vengono messi all’interno sovrascrivono il file che si trova nel tema genitore, tranne per il file functions.php, che viene esteso con il contenuto che gli aggiungiamo.

Plugin

La parte logica che si vuole aggiungere a un sito viene implementata qui, permettendo di staccare le funzionalità con la parte estetica.
Per creare un plugin è molto semplice, basta creare una cartella con il nome che vogliamo dare al plugin e all’interno un file con lo stesso nome, che poi avrà nell’intestazione alcune informazioni utili a WP per sapere che quello è un plugin. Qui di seguito la guida: https://developer.wordpress.org/plugins/plugin-basics/

Per capire meglio però come la creazione di un plugin possa poi agire con il sistema, bisogna capire come WP gestisca le azioni, quindi come funzionano gli Hooks.

Hooks

Gli hooks è il metodo principale con cui si estendono o modificano le funzionalità di base e di come crearli per far si che noi o altri possano aggiungere funzionalità in un determinato punto.
Qui la spiegazione della guida ufficiale: https://developer.wordpress.org/plugins/hooks/

Un esempio di utilizzo è quando si deve aggiungere uno script nel footer, allora si richiama l’hook wp-footer e si inietta il codice necessario.

Una lista degli hook di base di wordpress: https://developer.wordpress.org/reference/hooks/

Quasi tutti i plugin che sono strutturati per essere estesi hanno la propria documentazione con l’elenco dei hooks che implementa, qui un esempio di woocommerce (Link: https://woocommerce.github.io/code-reference/hooks/hooks.html)

Database

Il DB di WP è formato principalmente con il modello EAV (Entity Attribute Value) che permette di estendere i dati di qualsiasi informazione senza alterare quest’ultime.

Qui è possibile vedere lo schema di base: https://codex.wordpress.org/Database_Description

Uno dei problemi che potrebbe generare, soprattutto quando si usano tanti plugin o come ecommerce (per esempio woocommerce) è il fatto che le righe all’interno delle tabelle potrebbero aumentare di molto e quindi le operazioni di lettura potrebbero aumentare e, di conseguenza, anche il tempo con cui l’utente caricherà la pagina.
Non c’è una soluzione unica per risolvere questo problema, ma ci sono diverse cose che possono permettere di sistemare, una di queste è l’utilizzo di una cache.

Api rest

Le api rest è un metodo per esporre e scambiare dati con altri sistemi informatici, qui l’articolo che approfondisce meglio il funzionamento.

Per dare un esempio di come utilizzare le api, tra tante implementazioni che si possono fare, nel campo degli ecommerce, il plugin Woocommerce espone tutti i suoi dati, permettendo di interfacciarci con altri sistemi, per esempio creando un app, qui un esempio: https://blog.logrocket.com/building-ecommerce-mobile-app-react-native-woocommerce/ (questo argomento è un approfondimento che bypassa lo sviluppo su wordpress, ma fa capire quali potrebbero essere il motivo per cui lavorare per riuscire a esporre i proprio dati anche via API)

Qui la documentazione ufficiale: https://developer.wordpress.org/rest-api/

Ajax

Un alternativa all’implementazione dell’API per gestire alcuni dati nella pagina è quella di usare il sistema ajax integrato con WP, permettendo con poche righe di gestire richieste che facciamo all’interno di una pagina.

Un esempio è quello di implementare una chat in tempo reale e quindi di comunicare all’utente i nuovi messaggi (ricordandosi che sarà il browser a dover fare la richiesta per avere nuove notizie)

Qui la guida ufficiale: https://codex.wordpress.org/AJAX_in_Plugins

CPT

Il CPT (Custom Post Type) è la forma base di praticamente tutti gli elementi di WP, questo permette di creare un “prodotto” velocemente, senza dover molto interagire con il database direttamente, ma usando le funzionalità di base.
Link alla documentazione: https://developer.wordpress.org/plugins/post-types/

Transient

WIP, Intanto lascio qui il link alla documentazione: https://developer.wordpress.org/apis/handbook/transients/

Alcuni esempi

Sul mio sito potrai trovare alcuni articoli di alcune implementazioni che ho fatto, soprattutto per me stesso, che però utilizzano gli argomenti che ho citato sopra.

Per esempio:
WP: Creare un plugin per salvare l’albero genealogico
WP: Come visualizzare il nostro albero genealogico
Downsell woocommerce

Best Practise

Soprattutto per lo sviluppo dei plugin esistono alcune regole che permettono di migliorare il codice: https://developer.wordpress.org/plugins/plugin-basics/best-practices/

Queste regole servono soprattutto per evitare problemi durante in mantenimento del plugin, soprattutto se è pubblico.

Conclusione

Questo articolo è una piccola roadmap per introdurre i concetti base che tornano utili per sviluppare le funzionalità del proprio sito web.