Estoy tratando de modificar la cabeza y el pie de mis páginas de WooCommerce. Tengo una if
declaració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 if
declaración, nada cambia. Pero si modifico el PHP en la else
declaració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_VERSION
constante, 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