Métodos de integração de dados de plug-in com temas


17

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!


3
Se todas as perguntas sobre WPSE seria tão bem pensado ... :)
scribu

@scribu ... você está dizendo isso porque eu incluí um link para o seu plugin;) Sério, obrigado pelo elogio. Eu estava preocupado que isso seria uma pergunta estúpida, mas é uma que está me atormentando há um tempo.
Tollmanz

Outro +1 de mim. Para o "porquê", leia o comentário @scribu.
Kaiser

@kaiser & scribu ... Espero que vocês pensem sobre este tópico. Eu adoraria ouvir o que você tem a dizer.
Tollmanz

@tollmanz Já está pronto. Mas um Q tão intenso precisa de um pouco de reflexão e tempo.
Kaiser

Respostas:


4

Não consigo responder a todas as perguntas que você perguntou, pois a leitura demorou bastante tempo;), mas tento fornecer algumas idéias sobre minha experiência pessoal no desenvolvimento de plugins gratuitos e de código aberto.

1. Nunca faça demais. Recursos são a morte de todos os plugins. Crie uma versão básica primeiro e teste a reação dos seus usuários. Se o seu plugin chamar muita atenção, você poderá integrar os recursos mais solicitados.

2. Evite preencher todos os casos de uso. Você precisa manter seu plugin. O WP oferece uma nova versão a cada três meses. E às vezes é difícil seguir com todos os seus plugins. Para dar um exemplo: Atualmente, uma nova versão da API de configurações é discutida no Trac. Quando isso terminar, haverá a chance de muitos desenvolvedores de plugins ou temas precisarem alterar uma grande parte do código e algumas pessoas - como eu - até escreverem uma camada de abstração acima da API. Então, você precisa voltar, reescrever sua camada de base / abstração e refazer tudo o que chama partes dela. Eu prometo que isso é muito trabalho. E ainda mais se estiver vinculado ao seu código. Quando você começa a preencher muitos casos de uso, também tem muita evolução do código principal do WP que precisa monitorar, além de muito trabalho para manter seu código atualizado.

3. Nunca tente agrupar muitos exemplos de código (ou modelos) em seus plugins ou temas. Se você deseja direcionar desenvolvedores e usuários finais: use seu blog para documentação. Os desenvolvedores odeiam coisas assim e os usuários finais nunca ficam satisfeitos (consulte: preenchendo todos os casos de uso).

4. Divida seu código com sabedoria em arquivos únicos. Regra geral: um arquivo para uma parte. Exemplo: styles.php, scripts.php, taxonomies.php, cpts.php, etc. Carregue tudo de uma classe "mãe" (fábrica) e mantenha suas coisas "conectáveis". Se você precisar reescrever coisas, encontrará com facilidade. Se os desenvolvedores estão procurando por algo: eles o encontrarão facilmente. Muitos arquivos bem nomeados não o prejudicam.

5. Se você possui uma lista de estilos básicos (classes), deixe para o usuário . As chances são muito altas, pois os estilos do tema ou de outros plugins interceptam suas definições (não importa quanta especificidade você use). Apenas tente explicá-lo em algum lugar com o mínimo de texto possível.

6. Ame seu plugin. Mas deixe ir se você estiver entediado. :)


Agora - em poucas palavras - algo sobre sua ideia de plug-in em detalhes:

A. Arquivos de modelo são ruins. Como eu disse: documente no seu blog, ofereça exemplos de marcação e estilos lá. Seu blog terá lucro (e você também, se tiver anúncios).

B. Os códigos de acesso são kool. Eles não prejudicam ninguém se o plug-in for desativado (na maioria dos casos) e posteriormente poderão ser estendidos / evoluídos para os botões TinyMCE (que as pessoas adoram).

C. Deixe claro que seu plugin precisa de outro plugin. Questione isso e adicione uma observação a admin_notices (via register_activation_hook) se o outro plug-in não sair (vinculá-lo neste caso) ou não estiver ativado (você pode fazer isso para o usuário na ativação). Observe também que este plugin vem de uma fonte confiável e será mantido pelos próximos anos.

Nota: nada do que escrevi é mais do que minha opinião pessoal, que reflete minha experiência.


11
+1 nos botões de código de acesso TinyMCE (ou outros), essa técnica é muito útil para usuários não especialistas em tecnologia e ajuda com toda a integração de temas.
quer

11
Obrigado por seus pensamentos. Há muita sabedoria geral sobre plug-ins aqui. No que diz respeito à minha pergunta, parece que seu método é dar muito pouco em termos de integração de temas; em vez disso, você deseja que o usuário descubra isso através da documentação. Eu posso ver por que esse é um método razoável, mas ao mesmo tempo, um arquivo como esse fará com que muitos usuários sintam que algo está faltando no plug-in. No meu exemplo, acho que os usuários sentiriam que algo estava quebrado se não houvesse suporte embutido para exibir as bandas / álbuns / faixas.
Tollmanz

Se você quiser continuar, sugiro que você realmente use um código curto para adicionar marcações a um cpt (ou dentro de outro lugar). Em relação aos estilos: eu simplesmente verificaria se uma folha de estilo específica está presente em algum lugar da pasta do tema filho> pai. Se sim: Substituiria / regula silenciosamente a folha de estilo principal. Dessa forma, talvez você possa satisfazer os desenvolvedores e os usuários finais.
Kaiser

@ Kaiser ... ambos os pontos sólidos lá.
Tollmanz

2

Em alguns aspectos, você deve avaliar o equilíbrio entre criar um plug-in ou um tema, se o seu cenário exigir muita personalização / recursos, geralmente é sempre melhor criar um tema. Dessa forma, o usuário pode personalizar em termos de aparência, o que é sempre mais fácil do que fazer com que ele personalize a funcionalidade (bloqueando códigos de acesso em qualquer lugar), você tem maior controle de recursos, funciona com outros plugins, etc.

Um plug-in que tenta se integrar fortemente a toda a variedade de temas do mercado provavelmente causará muitos problemas e, honestamente, muito trabalho para você.

Por exemplo, em vez de criar um plug-in muito integrado com base no gerenciamento de música e discografia, em vez de criar um tema para esse fim, isso está se tornando mais popular para nichos de mercado que exigem trabalho personalizado. Um exemplo do mundo real seria um tema imobiliário, não há como usar um plug-in para isso, pois ele possui um conjunto de recursos tão profundo, em vez disso, ele é criado desde o início como um tema, pois os temas podem tirar proveito todos os recursos dos plugins de qualquer maneira.

Também é provável que, de uma perspectiva de marketing, um tema de nicho funcione melhor que um plug-in ao equilibrar os recursos de front-end.


Bom argumento sobre como conceituar isso como um plug-in (especialmente para os benefícios de marketing). O maior problema com isso é que nem sempre um plug-in e seus dados precisam levar a um tema inteiro. Pode ser apenas um componente menor de um site que, infelizmente, precisa de temas. Estou entendendo, no entanto, que simplesmente não é possível satisfazer todos os grupos de usuários e é melhor apenas apontar para um grupo.
Tollmanz

2

Páginas virtuais

Uma terceira técnica que vi foi atribuir uma página especial como espaço reservado para seu plug-in e usar o filtro 'the_content' para gerar o que você precisa.

Dessa forma, você pode criar modelos que se misturam à estrutura do tema, pois não é necessário lidar com cabeçalhos, barras laterais, rodapés e divs de wrapper.

Um ótimo exemplo disso pode ser encontrado no plugin bbPress:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


Você ofereceria uma amostra de código? Eu acho que isso é algo que muitos dev.s de plug-ins gostariam de ver. (+1).
Kaiser

Você pode ver o novo plug-in do bbPress como exemplo.
scribu

Isto é muito interessante. Vou ter que olhar o código antes de julgar.
tollmanz

@ scribu: Eu estava procurando por ele para adicionar um link, mas não consigo encontrá-lo via plugins.svn. Você poderia postar um link para leitores posteriores? Obrigado.
Kaiser

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.