Estou desenvolvendo um plugin Wordpress Woocommerce. No meu ambiente local, ele funciona bem, mas tenho problemas ao adicionar o plug-in a uma réplica do ambiente prod. Eu sou novo no wordpress e não estou muito familiarizado com web dev (eu sou um programador Java).
No arquivo de plug-in, instancio uma classe a partir do pacote de plug-ins do Woocommerce, assim:
$coupon = new WC_Coupon($some_code);
No ambiente local (php 5.4.10, Woocommerce 2.0.13, Wordpress 3.6), tudo bem. No ambiente de produção (php 5.4.10, Woocommerce 1.6.5.2, Wordpress 3.4.2), tenho o seguinte erro:
Fatal error: Class 'WC_Coupon' not found
Eu tentei incluir o arquivo em que a classe WC_Coupon está definida, mas o erro se torna
Fatal error: Cannot redeclare class WC_Coupon
Então, qual é a maneira correta de usar classes declaradas em outro plug-in?
Nota: a atualização não é uma opção no momento.
plugins_loaded
é o gancho adequado. Será preciso pesquisar quando exatamente essa classe está disponível e depois conectar-se a ela. Enfim +1register_deactivation_hook( __FILE__, 'deactivate');
. Então eu mal posso esperar. Posso pedir ao wordpress para carregar a classe se ela ainda não estiver carregada?WC_Coupon
é carregado por__construct
daWooCommerce
classe principal (realmente peloincludes()
método chamado diretamente por__construct
) e aWooCommerce
classe é instanziada (como singleton) assim que o plugin é carregado. Entãoplugins_loaded
é gancho adequada neste caso;)class_exists( 'WC_Coupon' )
. Também indique que você está usando isso durante desativação ... poderia ter salvo respondendo toneladas multidão de tempo ...É tarde demais, mas gostaria de compartilhar como usar o woocommerce e suas classes sem que uma classe de erro não seja encontrada.
Primeiro, verifique se o woocommerce está instalado e use o
woocommerce_loaded
gancho de ação.Espero que isso ajude alguém.
fonte
A maneira correta seria:
É melhor verificar se a classe existe antes de usá-la; isso evita erros fatais se o plug-in estiver desativado.
Você não pode redefinir uma classe que não é permitida no PHP.
Você também pode estender a classe:
Mas na maioria das vezes, e nesse caso com o WooCommerce, é melhor encontrar um gancho na documentação que irá lidar com o trabalho.
fonte