Gostaria de obter algumas opiniões sobre as melhores práticas para o desenvolvimento de plugins do WordPress que fornecem integração de temas.
Para fazer sentido ao fazer esta pergunta, deixe-me começar com um exemplo hipotético de um cenário que me interessa. Imagine que eu criei um plugin chamado "Discography". A discografia registra três tipos de postagem personalizados: "Bandas", "Álbuns" e "Faixas". O plug-in também fornece meta boxes que fornecem detalhes para cada tipo de postagem, bem como taxonomias personalizadas para organizar cada tipo de postagem. Esses tipos de postagens estão vinculados ao plug-in Postagens 2 Postagens . Dentro do administrador, o usuário pode adicionar novas bandas, que podem ser associadas a álbuns, as quais, por sua vez, são associadas a faixas, todas as quais terão muitos outros dados adicionados a eles por meio de meta boxes e taxonomias.
Agora, não quero que este plug-in simplesmente configure um administrador para que os usuários insiram essas informações; Eu gostaria que ele fornecesse algumas exibições padrão para os dados. Um usuário / desenvolvedor mais avançado seria bom em ter apenas esse administrador. Seria fácil o suficiente para ela pegar esses dados e usá-los no tema; no entanto, sem algumas visualizações padrão, esse plug-in seria inútil para a maioria dos usuários. Neste exemplo, você pode exibir qualquer coisa como (parênteses mostram como as informações podem ser exibidas na ordem da hierarquia do modelo):
- Bandas (prefixo único-band.php, single.php, index.php, código de acesso)
- Álbuns (prefixo-único-album.php, single.php, index.php, código de acesso)
- Faixas (single-prefix-track.php, single.php, index.php, shortcode)
- Listagem de Bandas (template-band-list.php, page-band-list.php, page- {id} .php, page.php, index.php, shortcode)
- Listagem de álbum (template-album-list.php, page-album-Listing.php, página- {id} .php, page.php, index.php, shortcode)
- Linha do tempo do álbum (template-album-timeline.php, page-album-timeline.php, página- {id} .php, page.php, index.php, shortcode)
É importante que exista alguma apresentação padrão para esses tipos de postagem, pois os arquivos de modelo padrão não exibirão todas as informações necessárias para cada tipo de postagem. Por exemplo, o tema Twenty Eleven, por padrão, mostraria apenas o nome, categorias, descrição e data de publicação de um álbum. Não é muito útil para um álbum. Eu gostaria de fornecer um único modelo de postagem que inclua a banda, data de lançamento, gravadora, versões de álbuns, faixas etc. Como desenvolvedor de plug-ins, eu sentiria que isso seria importante. Eu sei que o modelo não funcionaria para todos os temas, mas deve haver algum padrão que possa ser mais integrado ao tema do usuário.
Mais uma vez, estou curioso sobre qual é a melhor maneira de lidar com essa situação? Eu acho que você poderia fazer qualquer um dos seguintes.
Códigos de acesso
Os códigos de acesso podem ser usados como uma maneira muito flexível e amigável para permitir que os não-desenvolvedores adicionem bandas, álbuns, faixas, listas de bandas etc. em qualquer lugar do site. Seria útil apresentar bandas em páginas específicas ou criar páginas separadas para cada banda (não muito eficiente, mas alguns usuários abordam as coisas dessa maneira). O código abreviado geraria HTML, que seria vinculado a um arquivo CSS fornecido que forneceria uma boa visualização padrão dos dados desejados. Tudo estaria contido nos arquivos de plug-in e nada precisaria ser feito com o tema.
Arquivos de modelo
O plug-in também pode ser enviado com arquivos de modelo. Os arquivos de modelo podem ser marcados e estilizados para uma boa visualização padrão. Você pode fornecer instruções para o usuário mover os arquivos para a pasta do tema, para que o tema encontre os modelos certos quando os tipos de postagem forem exibidos. Você pode até fornecer uma interface para permitir que o usuário mova os arquivos com um único clique (nota: eu não criaria arquivos na pasta de temas do usuário na ativação porque adicionar arquivos ao tema deles sem que eles iniciassem é ruim) .
Você também pode usar filtros para utilizar esses arquivos sem movê-los para fora da pasta do plug-in, mantendo tudo independente. Eu vi os filtros "template_include" e "{$ type} _template" usados para essa finalidade. De fato, você pode usar modelos da pasta de temas e, se não estiverem presentes, poderá recorrer a esses filtros para fornecer as visualizações padrão.
A questão
Gosto de saber o que os outros acham que são as melhores práticas para essas situações, se as idéias apresentadas são problemáticas de alguma maneira e quaisquer alternativas que não incluí.
Obrigado!