Cómo verificar si WooCommerce está activado en el tema

26 ago 2014, 18:36:41
Vistas: 41.3K
Votos: 11

Estoy creando un tema con WooCommerce que tiene lo siguiente:

<ul>

  <li>
    <?php 
    if( is_user_logged_in() ){ 
    ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Mi Cuenta', 'woothemes' ); ?>"><?php _e( 'Mi Cuenta', 'woothemes' ); ?></a>
    <?php } else { ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Iniciar Sesión', 'woothemes' ); ?>"><?php _e( 'Iniciar Sesión', 'woothemes' ); ?></a>
    <?php 
    } 
    ?>
  </li>

  <li>
    <a href="<?php echo get_option( 'home' ) . '/' . 'my-lists/' ?>" title="Mi Lista de Deseos">Lista de Deseos</a>
  </li>

  <!--
  <li><a href="#" title="Actualizaciones por correo">Actualizaciones por Correo</a></li>
  -->
  <li> 
    <?php 
    global $woocommerce; 
    ?>
    <a id="header-ShoppingCart" class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>" title="<?php _e( 'Ver tu carrito de compras', 'woothemes' ); ?>"><?php echo sprintf( _n( '%d item', 'Mi Bolsa (%d)', $woocommerce->cart->cart_contents_count, 'woothemes' ), $woocommerce->cart->cart_contents_count ); ?> - <span id="header-cartCount"><?php echo $woocommerce->cart->get_cart_total(); ?></span></a>
  </li>

</ul>

Sin embargo, esto rompe el sitio si el plugin WooCommerce no está activado. ¿Cómo puedo verificar si el plugin WooCommerce está activado?

0
Todas las respuestas a la pregunta 6
7
36

Podrías verificar si existe la clase 'WooCommerce' y luego ejecutar el código que requiere WooCommerce.

<?php
if ( class_exists( 'WooCommerce' ) ) {
  // código que requiere WooCommerce
} else {
  // parece que no tienes WooCommerce activado
}
?>
26 ago 2014 18:42:54
Comentarios

class_exists('WooCommerce') va a devolver falso, si el código está colocado en functions.php mientras se "activa el plugin" (el plugin se va a activar después de que verifiques la clase WooCommerce).

pyronaur pyronaur
28 ene 2015 13:58:52

¿Entonces esto sería falso si alguien cargara la página exactamente en el momento en que se está activando el plugin?

hereswhatidid hereswhatidid
28 ene 2015 16:49:48

No puedes cargar en el "momento exacto", puedes cargar 1ms antes o después.

Es importante prestar atención aquí, porque, si declaras alguna función de Woo para una condición donde WooCommerce no existe (como tu propia función is_woocommerce()), entonces recibirás un error fatal al intentar activar el Plugin de WooCommerce, porque registrarás tu función primero, y solo entonces WooCommerce intentará registrar su función is_woocommerce(), y eso va a causar un error fatal e impedirá que el plugin WooCommerce se active nunca.

pyronaur pyronaur
29 ene 2015 18:14:04

¿Cómo evitaría que WooCommerce se cargue? ¿Si nombras una función que resultara ser la misma que algo dentro de WooCommerce?

hereswhatidid hereswhatidid
29 ene 2015 18:28:45

Desencadenaría un Fatal Error, "Cannot redeclare function is_woocommerce". Pruébalo.

pyronaur pyronaur
30 ene 2015 16:35:58

Correcto, pero mi punto es que solo fallaría si declaras una función que también esté declarada en WooCommerce. Simplemente detectar su existencia en un tema, como se menciona en la pregunta, no se vería afectado por esto.

hereswhatidid hereswhatidid
30 ene 2015 17:37:53

Sí, y no estoy discutiendo contigo, solo estoy publicando información relevante, por si alguien decide redeclarar una función si WooCommerce no existe

pyronaur pyronaur
5 feb 2015 11:38:14
Mostrar los 2 comentarios restantes
3
13

Para verificar si WooCommerce o cualquier otro plugin está activo, pega el siguiente código en la plantilla donde deseas mostrar el mensaje.

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    echo 'WooCommerce está activo.';
} else {
    echo 'WooCommerce no está activo.';
}
2 feb 2016 22:54:50
Comentarios

Esta respuesta parece ser la forma oficial de hacerlo. Consulta https://docs.woothemes.com/document/create-a-plugin/ .

Boycott A.I. Boycott A.I.
8 mar 2016 19:25:30

Esto es incorrecto, ya que no funciona en multisitio, su documentación está equivocada, usa class_exist en su lugar.

Goran Jakovljevic Goran Jakovljevic
8 jun 2016 14:19:32

class_exist no detecta woocommerce en multisitio para mí (WP 5.4.1, WC 4.1) La respuesta de @Arshid KK a continuación sí lo hace: https://wordpress.stackexchange.com/a/274000/34517

Larzan Larzan
16 may 2020 23:04:59
1

Utiliza el siguiente código. Funcionará también en multisitio.

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'woocommerce/woocommerce.php') ) {
  // Haz lo que quieras en caso de que WooCommerce esté instalado
}
20 jul 2017 12:51:03
Comentarios

Hasta ahora, esta debería ser la respuesta aceptada.

Aleksandar Aleksandar
7 ene 2021 19:12:17
0

Yo realizaría la verificación de la clase una vez que todos los plugins estén cargados. Porque en algunos casos puede devolver un falso negativo.

add_action( 'plugins_loaded', 'verificar_plugins_cargados' );

function verificar_plugins_cargados() {
   if ( class_exists( 'WooCommerce' ) ) {
       // hacer lo que necesites
   }
 }
10 oct 2022 03:19:16
0

La nueva forma oficial de hacerlo con soporte multisitio:

// Comprueba si WooCommerce está activo (incluyendo activación en red).
$plugin_path = trailingslashit( WP_PLUGIN_DIR ) . 'woocommerce/woocommerce.php';

if (
    in_array( $plugin_path, wp_get_active_and_valid_plugins() )
    || in_array( $plugin_path, wp_get_active_network_plugins() )
) {
    // Código personalizado aquí. WooCommerce está activo, aunque no
    // necesariamente inicializado (cuando eso es importante, considera
    // usar la acción `woocommerce_init`).
}
21 abr 2023 21:56:01
0

Yo uso:

$is_woo = (function_exist('is_woocommerce') || class_exists( 'WooCommerce' ) );
if($is_woo){
    // WooCommerce está activo
}else{
    // WooCommerce no está activo
}

También puedes usar este método sencillo:

function kdev_is_active_woocommerce(){
    return  (function_exists('is_woocommerce') || class_exists( 'WooCommerce' ) ) || ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) );
}
if(kdev_is_active_woocommerce()){
    // WooCommerce está activo
}else{
    // WooCommerce no está activo
}
19 oct 2023 21:31:02