Um dos meus temas do Wordpress requer alguns plugins de terceiros para funcionar corretamente.
Na maioria das vezes, eu costumava chamar funções de plugins de terceiros usando instruções condicionais como
if(function_exist('plugin_function')) {
plugin_function() // do something
}
suponha que eu precise usar extensivamente um plug-in através de muitos arquivos do meu tema ... Gostaria de evitar o uso de muitas condições SE ... existe uma maneira adequada de exigir que determinado plug-in específico seja instalado no WP ou melhor instalá-los se eles estiverem faltando antes de ativar o tema?
obrigado
fonte
function_exists
, um usuário normal simplesmente receberá a mensagem de que ele não instalou o plug-in em que outro plug-in se baseia. O problema é que o usuário realmente terá o plug-in instalado e então se pergunte por que ele não funciona . Ah, e eu não vou te rebaixar por isso.Embora isso não impeça a quebra do tema quando o plug-in estiver desativado, consulte este artigo sobre o plug-in "Como exibir um aviso de administrador para os temas necessários" . Nunca me senti à vontade com a ideia de um tema que força a instalação de um plug-in, e essa parece ser a próxima melhor opção.
Outro pensamento rápido: nunca tentei isso, mas me pergunto se você poderia descobrir uma maneira inteligente de abrigar vários ganchos em uma única condicional. Talvez você possa separar todas as funções condicionais em um arquivo diferente e requerê-lo apenas se
if( function_exists( 'plugin_function' ) )
retornartrue
(com o entendimento de que essa é uma verificação imperfeita.fonte
Se você precisar apenas de uma página de plug-in, então existe
is_plugin_active()
. Se você precisar do lado de fora, é melhor copiar / colar a função principal do seu tema e depois reutilizá-la:O condicional evita erros com a definição dupla da função.
fonte
if(function_exist('plugin_function'))
porif(is_plugin_active('plugin-file.php'))
Nota: Esta resposta está aqui apenas para facilitar a discussão entre @scribu e @kaiser. Mods: por favor, não exclua. Usuários / Leitores: Por favor, não vote. Se você deseja acompanhar a discussão, consulte o log de revisão / edição. Se você quiser participar da discussão, edite a resposta. Se a discussão tiver resultado, ela será marcada como tal. Obrigado.
Cenários
Também existem cenários diferentes com peso diferente, nos quais você pode ter uma dependência de plug-in. (Os exemplos são apenas fictícios). A palavra "(pai) Plugin" pode ser trocada com "Tema" do ponto de vista dos pais.
A seguir, tento esboçar o que acontece quando você atualiza o plug-in "other" e a verificação não funciona mais.
Verifica
Existem três possibilidades de verificação, se você quiser saber se um plug-in está ativo:
'active_plugins'
- existe?Se agora eu pegar meu plug-in Verificador de Link Interno como exemplo, que não oferece API pública e não deve ser estendido, não vejo motivo (como autor) para não alterar a nomeação de função interna sob demanda ou apenas por vontade . Portanto, se alguém tentasse pegar carona nesse plug-in, as coisas simplesmente quebrariam (dependendo da funcionalidade e da rigidez do pacote) na atualização. O mesmo vale para nomes de arquivos. Eu não teria nenhum motivo real (além disso, o plug-in seria desativado na atualização) para não alterar o nome do arquivo. A única coisa que me impediria de alterar o nome da pasta é que a verificação e notificação da atualização sejam executadas no nome do arquivo - se ele estiver hospedado no repositório oficial.
Então, eu diria que da parte mais fraca (fácil de mudar) para a mais difícil (muito falamos contra a mudança) de um plug-in (principal) seria:
função »nome do arquivo principal» pasta
Quando eu disse que uma verificação de função é menos frágil do que usar
is_plugin_active()
, presumi que a função em questão é aquela que o autor do plug-in incentiva explicitamente. O exemplo final disso seria awp_pagenavi()
tag de modelo oferecida pelo plugin WP-PageNavi.A dificuldade em definir dependências é que não existe uma maneira padrão de identificar exclusivamente plugins que não envolvam nomes de arquivos.
Mais pensamentos sobre o assunto:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
Acho que até agora podemos resumir em três pontos:
A maneira (até agora) mais inteligente que consigo pensar, que eu já vi em alguns (muito menos) plugins:
Sem pensar muito em detalhes, mas acho que você pode conectar seu aviso a um filtro 'all' e verificar o filtro atual se ele foi acionado quando você está no
shutdown
gancho ...?@scibu Este tópico foi direcionado ao tópico "seu". (Eu já deixei de falar sobre o meu). :)
Então, basicamente, se você precisar de uma dependência - e você tiver um bom autor -, ele poderá oferecer um gancho em vez disso / como substituto para uma tag de modelo. Porque o plug-in apenas se conectaria a ele se o gancho estivesse presente ou simplesmente não faria nada. E por outro lado, você não teria um erro quando os plugins não estivessem presentes.
Aqui está a parte difícil (ou mais das perguntas mais frequentes): Para escrever um aviso de administrador para informar o usuário sobre a dependência "Você precisa instalar» DisneyWonderLinks «", verifique o
array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. Não tenho certeza se isso funcionaria, mas depois que a matriz deve estar acessível em ambos os lados (público / administrador).Isso não funcionaria. Só porque um retorno de chamada está registrado em um gancho não significa que o gancho será acionado quando esperado. A única coisa que seria tipo de trabalho é usar o gancho 'shutdown', que você mencionou antes:
Obviamente, isso seria impresso na parte inferior, após a
</html>
tag, no front-end (já que é onde as tags de modelo são normalmente usadas), o que não é de muita utilidade.Você pode tentar armazenar a mensagem em wp_options e exibi-la na área de administração, mas isso abriria uma nova lata de worms: invalidação, plugins de cache etc.
fonte