Digamos que você está trabalhando em um projeto para alguém e o definiu, as tarefas são delegadas, você tem todas as bibliotecas e ferramentas necessárias para começar e separou qual será o tema ou apresentação, e qual será a funcionalidade ou os plugins.
Mas em vez de ter um punhado de plugins individuais, e se houvesse um pacote de plugins funcionais menores ou micro-plugins ou o que você quiser chamá-los trabalhando para alimentar o pacote?
Além disso, todos eles são construídos sobre a mesma base, mas que também compartilham código entre si e para tornar as coisas mais interessantes, você opta por usar um autoloader PSR-4 via Composer para cuidar de tudo isso?
Plugins WordPress de carregamento automático PSR-4
Primeiro, a maneira de pensar no que estou tentando dizer (porque quem sabe se estou claro 🙃) é que você tem seu trabalho no wp-content/pluginsdiretório. E seu plugin reside, digamos, acme-pluginse possui subdiretórios para seus micro-plugins.
Vamos manter isso simples para este exemplo e dizer que há o plugin principal e apenas um micro-plugin. O diretório seria algo assim;
Agora, há os arquivos que você espera ver em um plugin:
- LEIA-ME,
- LICENÇA,
- CHANGELOG,
- compositor.json
- compositor.lock
- fornecedor
- o arquivo de inicialização do plugin,
- etc.
Agora é o seguinte: se você estiver usando o PSR-2 e estiver usando um autoloader PSR-4, há duas coisas que você precisa saber:
- Os namespaces devem corresponder à organização do diretório. Falei um pouco sobre isso durante minha apresentação do WordCamp Atlanta 2017 (especificamente sob organização virtual e lógica).
- Como trabalhar
composer.jsonpara definir seus autoloaders. Você pode ler muito sobre isso aqui, mas vou dar as notas do precipício no restante deste post.
Portanto, o problema é que o vendordiretório reside em um nível acima de onde existem alguns dos arquivos de origem. Assim, a maneira padrão de configurar um autoloader personalizado no Composer não funcionará.
Por exemplo, é muito comum ver isso :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "src/",
}
},
// ...
}
Mas para compensar nosso trabalho, precisamos fazer isso :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "",
"AcmeMicroPlugin": "MicroPlugin/src/"
}
},
// ...
}
É uma mudança simples, mas é um exemplo simples, certo? Então, qual é a lição disso?
Observe que atualizamos algumas alterações no local de carregamento automático. Especificamente, isso é o que está acontecendo:
- O primeiro item é o namespace de nível superior ao qual pertencerão todos os plug-ins que pertencerão ao plug-in Acme.
- A segunda entrada refere-se ao MicroPlugin que você vê no diretório acima. Isso representa o namespace para este plugin em particular e diz ao Composer para procurar arquivos de origem para carregar automaticamente usando o diretório de propriedades
A partir daqui, você adicionará uma nova entrada para o autoloader correspondente a cada micro-plugin que pertencerá ao plug-in de nível superior.
Organizando futuros microplugins
Existem algumas maneiras de organizar seu código para que você possa usar um carregador automático padrão.
Se você seguir o modelo de micro-plugin (por falta de um termo melhor), ele não funcionará, então você terá que reorganizar seus arquivos, e isso pode ser uma dor ao longo do tempo.
