Come verificare se WooCommerce è attivato nel tema

26 ago 2014, 18:36:41
Visualizzazioni: 41.3K
Voti: 11

Sto creando un tema con WooCommerce che ha quanto segue:

<ul>

  <li>
    <?php 
    if( is_user_logged_in() ){ 
    ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Il mio Account', 'woothemes' ); ?>"><?php _e( 'Il mio Account', 'woothemes' ); ?></a>
    <?php } else { ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Accedi', 'woothemes' ); ?>"><?php _e( 'Accedi', 'woothemes' ); ?></a>
    <?php 
    } 
    ?>
  </li>

  <li>
    <a href="<?php echo get_option( 'home' ) . '/' . 'my-lists/' ?>" title="La mia Lista dei Desideri">Lista dei Desideri</a>
  </li>

  <!--
  <li><a href="#" title="Aggiornamenti via email">Aggiornamenti via Email</a></li>
  -->
  <li> 
    <?php 
    global $woocommerce; 
    ?>
    <a id="header-ShoppingCart" class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>" title="<?php _e( 'Visualizza il tuo carrello', 'woothemes' ); ?>"><?php echo sprintf( _n( '%d articolo', 'Il mio Carrello (%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>

Tuttavia questo causa problemi al sito se il plugin WooCommerce non è attivato. Come posso verificare se il plugin WooCommerce è attivato?

0
Tutte le risposte alla domanda 6
7
36

Puoi verificare se la classe 'WooCommerce' esiste, quindi eseguire il codice che richiede WooCommerce.

<?php
if ( class_exists( 'WooCommerce' ) ) {
  // codice che richiede WooCommerce
} else {
  // sembra che WooCommerce non sia attivato
}
?>
26 ago 2014 18:42:54
Commenti

class_exists('WooCommerce') restituirà false, se il codice è posizionato in functions.php durante l'"attivazione del plugin" (il plugin verrà attivato dopo aver verificato la presenza della classe WooCommerce).

pyronaur pyronaur
28 gen 2015 13:58:52

Quindi questo sarebbe falso se qualcuno caricasse la pagina esattamente nel momento in cui il plugin viene attivato?

hereswhatidid hereswhatidid
28 gen 2015 16:49:48

Non puoi davvero caricare nel "momento esatto", puoi caricare 1ms prima o dopo.

È importante prestare attenzione qui, perché, se dichiari una qualche funzione Woo per una condizione in cui WooCommerce non esiste (come la tua funzione personalizzata is_woocommerce()), riceverai un errore fatale quando tenti di attivare il Plugin WooCommerce, perché registrerai prima la tua funzione, e solo dopo WooCommerce tenterà di registrare la sua funzione is_woocommerce(), e questo causerà un errore fatale impedendo l'attivazione del plugin WooCommerce.

pyronaur pyronaur
29 gen 2015 18:14:04

Come potrebbe impedire a WooCommerce di caricarsi? Se hai nominato una funzione che per caso è la stessa di qualcosa all'interno di WooCommerce?

hereswhatidid hereswhatidid
29 gen 2015 18:28:45

Scatenerebbe un Fatal Error, "Cannot redeclare function is_woocommerce". Provalo.

pyronaur pyronaur
30 gen 2015 16:35:58

Esatto, ma il mio punto è che fallirebbe solo se dichiari una funzione che è già dichiarata in WooCommerce. Semplicemente rilevare la sua esistenza in un tema, come indicato nella domanda, non sarebbe influenzato da questo.

hereswhatidid hereswhatidid
30 gen 2015 17:37:53

Sì, e non sto discutendo con te, sto solo pubblicando informazioni rilevanti, nel caso qualcuno decida di ridefinire una funzione se WooCommerce non esiste

pyronaur pyronaur
5 feb 2015 11:38:14
Mostra i restanti 2 commenti
3
13

Per verificare se WooCommerce o qualsiasi altro plugin è attivo, incolla il seguente codice nel template dove vuoi visualizzare il messaggio.

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    echo 'WooCommerce è attivo.';
} else {
    echo 'WooCommerce non è attivo.';
}
2 feb 2016 22:54:50
Commenti

Questa risposta sembra essere il modo ufficiale per farlo. Vedi https://docs.woothemes.com/document/create-a-plugin/.

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

Questo è sbagliato, perché non funziona sul multisito, la loro documentazione è errata, usa class_exist invece.

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

class_exist non rileva woocommerce sul multisito per me (WP 5.4.1, WC 4.1) La risposta di @Arshid KK qui sotto funziona: https://wordpress.stackexchange.com/a/274000/34517

Larzan Larzan
16 mag 2020 23:04:59
1

Utilizza il seguente codice. Funzionerà anche su multisite.

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'woocommerce/woocommerce.php') ) {
  // Fai quello che vuoi nel caso WooCommerce sia installato
}
20 lug 2017 12:51:03
Commenti

Al momento questa dovrebbe essere la risposta accettata.

Aleksandar Aleksandar
7 gen 2021 19:12:17
0

Eseguirei il controllo della classe solo dopo che tutti i plugin sono stati caricati. In alcuni casi, infatti, potrebbe restituire un falso negativo.

add_action( 'plugins_loaded', 'see_all_plugins_loaded' );

function see_all_plugins_loaded() {
   if ( class_exists( 'WooCommerce' ) ) {
       // fai quello che devi fare
   }
 }
10 ott 2022 03:19:16
0

Il nuovo metodo ufficiale per farlo con supporto multisito:

// Verifica se WooCommerce è attivo (incluso l'attivazione in rete)
$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() )
) {
    // Codice personalizzato qui. WooCommerce è attivo, tuttavia non è
    // necessariamente inizializzato (quando questo è importante, considera
    // di usare l'azione `woocommerce_init`).
}
21 apr 2023 21:56:01
0

Io uso:

$is_woo = (function_exist('is_woocommerce') || class_exists( 'WooCommerce' ) );
if($is_woo){
    // WooCommerce è attivo
}else{
    // WooCommerce non è attivo
}

puoi usare anche questo metodo semplice:

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 è attivo
}else{
    // WooCommerce non è attivo
}
19 ott 2023 21:31:02