Estou tentando modificar a cabeça e o pé das minhas páginas do WooCommerce. Eu tenho uma if
declaração que deve visar a loja e o carrinho do WooCommerce, mas não é. Se eu modificar o PHP após a if
instrução, nada será alterado. Mas se eu modificar o PHP na else
declaração é funciona:
Isso não funciona:
<?php if (function_exists('woocommerce')): ?>
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/CHANGE'); ?>
<?php endif ?>
<?php else: ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
Isso funciona:
<?php if (function_exists('woocommerce')): ?>
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
<?php else: ?>
<?php get_template_part('inc/CHANGE'); ?>
<?php endif ?>
Eu acho que a função WooCommerce pode não estar definida corretamente, porque isso também funciona:
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/header-shop'); ?>
<?php else: ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
fonte
if( function_exists( 'WC' ) )
, mas é mais preciso ter o nome do plugin na verificação de classe, como você sugeriu ;-)WC()
existe , eu estava apenas tentando encontrar um caminho mais curto referindo-se a ela ;-) Eu acho que seria mais preciso comif( function_exists( 'WC' ) && is_object( WC() ) && is_a( WC(), 'WooCommerce' ) )
;-). Jogando junto, poderíamos também teste para constantes (por exemploWOOCOMMERCE_VERSION
) ou ações (por exemplodid_action( 'woocommerce_loaded' )
) ;-) @ialocincheck_for_woocommerce()
add_action('plugins_loaded', 'check_for_woocommerce');
Muitos dos plugins oficiais do WooCommerce resolvem isso verificando a
WC_VERSION
constante, que o WooCommerce define, uma vez que todos os plugins foram carregados. Código simplificado:O bônus adicional é que você pode usar o PHP
version_compare()
para verificar se uma versão nova o suficiente do WooCommerce está instalada (se o código exigir recursos específicos), pois a constante WC_VERSION é adequada para isso.fonte
Para melhorar as respostas dadas, estamos usando o seguinte:
Isso evita dois problemas:
if ( in_array( 'woocommerce/woocommerce.php', apply_filters(...
, não funciona.if ( class_exists( 'WooCommerce' ) ) { .. }
, não funciona.fonte
Achei isso útil na documentação do desenvolvedor do WooCommerce.
Você pode simplesmente chamar a
is_woocommerce_active()
função dentro do seu arquivo de plugin.Exemplo
is_woocommerce_active definido como abaixo, conforme documentação woo
fonte
Você pode agrupar seu plug-in em uma verificação para ver se o WooCommerce está instalado e ativo ou não:
fonte