Estoy tratando de modificar la cabeza y el pie de mis páginas de WooCommerce. Tengo una ifdeclaración que se supone que debe apuntar a la tienda y al carrito de WooCommerce, pero no lo es. Si modifico el PHP después de la ifdeclaración, nada cambia. Pero si modifico el PHP en la elsedeclaración es funciona:
Esto no 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 ?>
Esto 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 ?>
Creo que la función WooCommerce podría no estar definida correctamente, porque esto también 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 ?>
fuente

if( function_exists( 'WC' ) ), pero es más exacto tener el nombre del complemento en la verificación de clase, como sugeriste ;-)WC()existe , solo estaba tratando de encontrar un camino más corto al referirme a ella ;-) Supongo que sería más preciso conif( function_exists( 'WC' ) && is_object( WC() ) && is_a( WC(), 'WooCommerce' ) );-). Jugando, también podríamos probar constantes (pWOOCOMMERCE_VERSION. Ej. ) O acciones (pdid_action( 'woocommerce_loaded' ). Ej. ) ;-) @ialocincheck_for_woocommerce()función, y registrarlo conadd_action('plugins_loaded', 'check_for_woocommerce');Muchos de los complementos oficiales de WooCommerce resuelven esto comprobando la
WC_VERSIONconstante, que WooCommerce define, una vez que todos los complementos se han cargado. Código simplificado:La ventaja adicional es que puede usar PHP
version_compare()para verificar si una nueva versión de WooCommerce está instalada (si su código requiere capacidades específicas), ya que la constante WC_VERSION es adecuada para esto.fuente
Para mejorar las respuestas dadas, estamos usando esto:
Esto evita dos problemas:
if ( in_array( 'woocommerce/woocommerce.php', apply_filters(...no funciona.if ( class_exists( 'WooCommerce' ) ) { .. }no funciona.fuente
Esto me pareció útil en la documentación para desarrolladores de WooCommerce.
Simplemente puede llamar a la
is_woocommerce_active()función dentro de su archivo de complemento.Ejemplo
is_woocommerce_active se define a continuación según la documentación de woo
fuente
Puede envolver su complemento en una comprobación para ver si WooCommerce está instalado y activo o no:
fuente