Meu problema é que, no arquivo principal do plugin, incluo um arquivo PHP mais ou menos assim:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
e nesse arquivo eu chamo uma função do WordPress como:
add_action('hook', 'callback');
e eu recebo:
Erro fatal: Chamada para a função indefinida add_action ()
Agora, antes de você dizer "use if(**function_exists**('add_action')){
" se eu usar isso, simplesmente não funciona.
As questões:
- Qual seria a maneira correta de fazer isso?
- O que são a diferença entre
include
,include_once
,require
e quando eu uso bruxa?
plugin-development
functions
Bainternet
fonte
fonte
WP_PLUGIN_URL
em seu código acima :)Respostas:
Chegando atrasado para esta festa, mas aqui está a maneira "WordPress": use
plugin_dir_path( __FILE__ )
, por exemplo:Note que a função não retornar a barra final para o caminho de arquivo.
fonte
__FILE__
lo, o resultado será relativo ao arquivo atual do qual você o chama; portanto, se suainclude
instrução for feita a partir de um subdiretório dentro da estrutura de arquivos do plug-in, você também receberá o subdiretório.require_once(plugin_dir_path(__DIR__).'/myfile.inc');
Examinei alguns plugins criados anteriormente para ver as diferentes maneiras de incluir arquivos extras dentro dos plugins e notei que existem dois métodos que você pode usar, provavelmente há mais.
Defina o diretório do seu plug-in
Dentro do seu plugin, tenha a seguinte definição para definir o local atual do plugin.
Código de exemplo:
Apenas inclua ou exija
Você pode simplesmente usar; inclua, inclua_once, exija ou exija_once dentro da pasta do plug-in, referenciando o local como no código de exemplo abaixo. O exemplo abaixo será baseado em um arquivo no diretório raiz do plugin, incluindo outro arquivo dentro de uma pasta dentro da pasta do plugin.
Código de exemplo:
fonte
Acabo renunciando às construções do WordPress para inclui e uso o seguinte:
Eu não acho que ele realmente resolverá seu problema, o que parece ser um problema de escopo, mas é o código que eu uso.
Quanto à diferença entre include e require:
include lançará um aviso se o arquivo não for encontrado.
Exigir lançará um erro fatal se o arquivo não for encontrado.
include_once e require_once não incluirão / exigirão o arquivo / código novamente se ele já tiver sido incluído / exigido (observe que, tanto quanto eu sei, isso é apenas para um arquivo específico em um diretório específico).
fonte
Primeiro, obrigado a todos que responderam,
Meu problema foi chamar os arquivos incluídos com URL completo para que eles não passassem pelo WordPress. e isso aconteceu porque, como afirmei na pergunta, estava chamando-os do arquivo principal do plug-in. então a correção acabou usando:
eu li sobre no suporte do WordPress . e novamente obrigado por responder!
fonte
As informações acima são da documentação do PHP, a coisa é que não existe uma correta, vai depender da necessidade do código, eu preciso () de coisas importantes, como funções, mas de arquivos de tema como rodapé ou loop que eu uso include_once ou include porque eu posso lidar com o aviso e dizer ao usuário / visitante que ocorreu um erro em vez de apenas um erro fatal
fonte
Olá @ בניית אתרים:
Quando o WordPress está carregando, ele define a
add_action()
função antes de tentar carregar qualquer plug-in. O fato de você estar recebendo o erro indica que você está fazendo algo estranho ou que algo está errado com a instalação do WordPress.Para quem você está carregando o seu "plugin" ? Você está usando um
include*()
ourequire*()
para carregá-lo, talvez em seuwp-config.php
arquivo?fonte
ou
ou
Nota: para enfileirar arquivos .css e .js
admin_enqueue_scripts
dentro do plug-in, useplugin_dir_url( __FILE__ )
fonte
Sempre que você cria um novo arquivo dentro do diretório de trabalho, é necessário incluí-lo sempre. Mas tente um método para escanear seu directroy e anexá-lo automaticamente, não apenas os arquivos php, o que ajuda a incluir arquivos php, js e css corretamente nos dois lados (backend, front end).
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
fonte