Supponiamo che stai lavorando a un progetto per qualcuno e lo hai individuato, le attività sono delegate, hai tutte le librerie e gli strumenti necessari per iniziare e hai separato quello che sarà il tema o la presentazione e quali saranno le funzionalità o i plugin.
Ma invece di avere una manciata di singoli plug-in, cosa accadrebbe se ci fosse un pacchetto di plug-in o micro-plug-in funzionali più piccoli o come vuoi chiamarli che funzionano per alimentare il pacchetto?
Inoltre, questi sono tutti costruiti sulla stessa base ma condividono anche il codice tra loro e per rendere le cose più interessanti, scegli di utilizzare un caricatore automatico PSR-4 tramite Composer per occuparti di tutto questo?
PSR-4 Caricamento automatico dei plugin di WordPress
Innanzitutto, il modo per pensare a quello che sto cercando di dire (perché chissà se sono chiaro 🙃) è che hai il tuo lavoro nella wp-content/plugins
directory. E il tuo plugin risiede, diciamo, acme-plugins
e ha sottodirectory per i tuoi micro-plugin.
Lo terremo semplice per questo esempio e diciamo che c’è il plug-in principale e quindi solo un micro-plugin. La directory sarebbe simile a questa;
Ora, ci sono i file che ti aspetti di vedere in un plug-in:
- LEGGIMI,
- LICENZA,
- CAMBIAMENTI,
- compositore.json
- compositore.lock
- venditore
- il file bootstrap del plugin,
- eccetera.
Ora ecco il punto: se stai usando la PSR-2 e utilizzerai un caricatore automatico PSR-4, allora ci sono due cose che devi sapere:
- Gli spazi dei nomi devono corrispondere all’organizzazione della directory. Ne ho parlato un po’ durante la mia presentazione di WordCamp Atlanta 2017 (in particolare sotto l’organizzazione virtuale e logica).
- Come lavorare
composer.json
per definire i tuoi caricatori automatici. Puoi leggere molto su questo qui, ma darò le note sulla scogliera nel resto di questo post.
Quindi il problema è che la vendor
directory risiede a un livello sopra il punto in cui esistono alcuni dei file di origine. Pertanto, il modo standard di impostare un caricatore automatico personalizzato in Composer non funzionerà.
Ad esempio, è molto tipico vedere questo :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "src/",
}
},
// ...
}
Ma per compensare il nostro lavoro, dobbiamo fare questo :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "",
"AcmeMicroPlugin": "MicroPlugin/src/"
}
},
// ...
}
È un semplice cambiamento, ma è un semplice esempio, giusto? Allora, qual è il vantaggio di questo?
Tieni presente che abbiamo aggiornato alcune modifiche nella posizione di caricamento automatico. Nello specifico, questo è quello che sta succedendo:
- Il primo elemento è lo spazio dei nomi di primo livello a cui apparterranno tutti i plugin che apparterranno al plugin Acme.
- La seconda voce si riferisce al MicroPlugin che vedi nella directory ripresa sopra. Questo rappresenta lo spazio dei nomi per questo particolare plugin e dice al Composer di cercare i file di origine da caricare automaticamente usando la directory delle proprietà
Da qui, aggiungerai una nuova voce per il caricatore automatico che corrisponde a ciascun micro-plugin che apparterrà al plug-in di primo livello.
Organizzare i futuri micro plugin
Esistono alcuni modi in cui puoi gestire l’organizzazione del codice in modo da poter utilizzare un caricatore automatico predefinito.
Se segui il modello del micro-plugin (per mancanza di un termine migliore), non funzionerà, quindi devi riorganizzare i tuoi file e questo può essere un problema nel tempo.