Conectando-se a plug-ins

12

Estou trabalhando em um plug-in que idealmente seria capaz de fazer coisas quando um usuário faz algo através de um plug-in diferente .

Posso adicionar ganchos personalizados nesses plugins, mas obviamente isso não funcionaria bem quando eu quero distribuir meu plug-in. Existe uma boa maneira de adicionar ganchos aos plugins de outras pessoas a partir do meu próprio plugin? A única solução real é pedir ao autor que inclua ganchos personalizados para que outros desenvolvedores possam desenvolver seu trabalho?

Exemplo: quero fazer algo no meu plug-in quando alguém retweetar um artigo. Se houvesse um gancho personalizado em qualquer plug-in de retweet popular que eu pudesse conectar e disparar, seria ótimo. Não há, então posso modificar o plug-in para incluí-lo, mas isso só funciona para a minha cópia e não quero tentar redistribuí-lo.

Precisamos apenas tentar ser melhores desenvolvedores de plugins para que todos possamos jogar bem juntos?

Ryan Elkins
fonte
1
Ótima pergunta!
MikeSchinkel
"A única solução real é pedir ao autor que inclua ganchos personalizados para que outros desenvolvedores possam desenvolver seu trabalho?" Na maioria dos casos, sim. Há certas situações em que você pode conectar-se indiretamente ao plug-in, mas geralmente não é o caso. Diga a eles para escreverem seus plugins como se estivessem escrevendo para o núcleo do WordPress - inclua um filtro / ação sempre que necessário.
precisa saber é o seguinte
1
Dica: documente os ganchos fornecidos pelo plug-in para que outros autores do plug-in possam interagir com ele.
hakre

Respostas:

6

@Ryan Elkins:

Acho que a resposta depende de como importar cada caso de uso para você. Em alguns casos, seria algo que você precisa rápido e sujo; em outros, pode ser um caso de uso mais significativo. Aqui estão as duas coisas que vêm à mente:

Procure ganchos alternativos no WordPress Core

Se é algo rápido e sujo algumas vezes, você pode usar outros ganchos a jusante do núcleo para modificar o que precisa, ou ganchos a montante e a jusante através do uso de ob_start()/ ob_end_clean()(consulte @Todd Perkins, responda a " Lidando com saída HTML grande via código do plug-in " para um exemplo de código.)

Para rastrear os ganchos que você pode usar, confira o plug-in Instrument Hooks que eu publiquei ontem para ajudá-lo a encontrar os ganchos que você pode potencialmente usar.

Envie um patch com seu gancho desejado ao desenvolvedor do plug-in

Se o seu caso de uso for mais significativo para você ou a comunidade, recomendo que você adicione o gancho necessário ao plug-in. Em seguida, teste-o bem para garantir que ele realmente atenda ao seu caso de uso, após o qual você pode enviar um patch ao desenvolvedor do plug-in na esperança de que ele o aplique. Dessa forma, você facilita o máximo possível a eles, fornecendo código testado e começa a trabalhar no caso de uso para garantir que é realmente o que você precisa. Não sei dizer quantas vezes pensei que precisava de um certo gancho apenas para encontrar, depois de tentar implementar um, precisava de um gancho, mas que fosse diferente do que eu imaginava pela primeira vez.

Se você não está familiarizado com a criação de um patch, aqui está um bom artigo sobre o patch do núcleo do WordPress, para o qual a maioria se aplica aos plugins de patch e para o que não é, espero que seja óbvio o que fazer:

Espero que isto ajude?

PS Uma coisa que eu acho um pouco decepcionante e que sua pergunta é a porcentagem de plug-ins criados apenas para usuários finais, ou seja, que não têm ganchos próprios. Imagine se o WordPress fosse projetado como a maioria dos plugins? Seria inflexível e uma solução muito específica.

Talvez as coisas fossem diferentes se o WordPress tivesse a capacidade de instalar automaticamente plugins dos quais outros plugins dependem? Normalmente, tenho que escrever muitas das funcionalidades necessárias desde o início, porque os clientes querem as coisas de uma certa maneira e os plugins disponíveis, enquanto 90% deles não me permitem flexibilidade para atualizar os 10% restantes.

Eu realmente desejo que os líderes da comunidade WordPress identifiquem uma maneira de garantir que os plug-ins sejam recompensados ​​por seguir as práticas recomendadas (como adicionar ganchos para outros desenvolvedores), assim como boas respostas são recompensadas em um site StackExchange.

MikeSchinkel
fonte
2

Não só precisamos tentar e para ser melhor desenvolvedores de plugins para que todos nós podemos jogo agradável juntos?

Para iniciantes, sim.

A única solução real é pedir ao autor que inclua ganchos personalizados para que outros desenvolvedores possam desenvolver seu trabalho?

Essa seria uma boa solução.

Você também pode copiar o outro plug-in e apenas adicionar quaisquer alterações, embora isso seja mais complicado.

Arlen Beiler
fonte
2

Eu acho que você responde sua pergunta na pergunta, para que ela se torne um pouco retórica.

Obviamente, você está falando de um sistema semelhante ao que o Google incentiva com o Android e o sistema Intent, que um aplicativo pode publicar ações que ele é capaz de realizar em nome de outros aplicativos, que podem conectá-los e transmitir dados de volta e adiante. Pessoalmente, acho que é algo que precisamos seguir como bons desenvolvedores - usamos o WordPress porque já é incrível, incrível o suficiente para tomar a decisão de usá-lo ou desenvolver um produto interno semelhante bastante fácil na maioria dos casos. O repositório de plugins em si é novamente a mesma coisa, principalmente como usuário final + desenvolvedor - por que desenvolver um plug-in do twitter quando existe perfeitamente?

O mesmo 'por que desenvolver duplicatas' está no cerne da sua pergunta aqui. O sistema Android Intent permite que os aplicativos utilizem funções já criadas e passem dados entre eles, e isso é popular e frequentemente usado, porque é pressionado demais. Existe um sistema semelhante já implementado no WordPress, mas é muito raramente usado além dos ganchos presentes no código principal, que são muito usados.

Beneficiaria a comunidade se houvesse mais ganchos em plug-ins personalizados, mas como você diz, não há maneira fácil de adicionar ganchos quando / onde você precisar deles.

Em termos do plug-in do Twitter no qual você deseja se conectar, envie um e-mail ao autor, tenho certeza de que ele ficaria feliz em adicioná-lo para você.

Se você acha que seria um bom lugar para colocar um gancho no plug-in, faça-o e documente-o bem. Se mais pessoas começarem a colocar ganchos em plugins, ou se houver um esforço geral para fazê-lo, isso acontecerá eventualmente.

Então, para responder à sua pergunta final de:

Precisamos apenas tentar ser melhores desenvolvedores de plugins para que todos possamos jogar bem juntos?

Sim.


Edit: Eu pensei um pouco mais sobre a questão real e a melhor maneira de implementar ganchos, você não poderia adicionar uma ação que seria executada se a função específica que você está tentando executar do plug-in estivesse presente?

ninguém
fonte
Isso funcionaria, mas e se a função de um plugin diferente tivesse o mesmo nome?
Arlen Beiler
Opa, talvez não, porque você precisa saber o que está sendo retuitado e por quem. A verificação da função é uma solução em tempo de execução, o que precisamos é uma solução em tempo real, que seja executada quando a função em questão é chamada ou retorna dados.
Arlen Beiler
@Arlen - Digamos que você deveria criar sua própria função que verifica se a função específica está lá. Ele seria executado após 'plugins_loaded' e, se estiver lá, define um booleano que habilita os recursos. É altamente dependente do código não mudar, mas não vejo por que não funcionaria?
ninguém
0

defina uma função:

function my_footer() {
    do_action('my_footer');
}

agora você pode conectar este anzol: add_action('my_footer', 'example_function', 1);# mais informações ver no meu post .

bueltge
fonte
not => agora, este próprio => isto. Corrigir?
Arlen Beiler
Eu entendo como adicionar ganchos personalizados - a questão é como se desconectar do plug-in de outra pessoa, idealmente de uma maneira que não exija modificação direta de seu plug-in.
Ryan Elkins
@Arlen: muito obrigado, desculpe pelo meu inglês ruim @Ryan: não é possível, quando o plug-in não tem um gancho; mas você pode verificar a substituição da função ou classe, quando o autor solicitar isso em seu plug-in. Mas é possível solicitar plug-ins ativos e conectar-se anteriormente no WP como o outro plug-in e substituir sua função.
bueltge