Cum să verifici dacă WooCommerce este activat în temă

26 aug. 2014, 18:36:41
Vizualizări: 41.3K
Voturi: 11

Creez o temă cu WooCommerce care conține următoarele:

<ul>

  <li>
    <?php 
    if( is_user_logged_in() ){ 
    ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Contul Meu', 'woothemes' ); ?>"><?php _e( 'Contul Meu', 'woothemes' ); ?></a>
    <?php } else { ?>
      <a href="<?php echo get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ); ?>" title="<?php _e( 'Autentificare', 'woothemes' ); ?>"><?php _e( 'Autentificare', 'woothemes' ); ?></a>
    <?php 
    } 
    ?>
  </li>

  <li>
    <a href="<?php echo get_option( 'home' ) . '/' . 'my-lists/' ?>" title="Lista mea de dorințe">Lista de dorințe</a>
  </li>

  <!--
  <li><a href="#" title="Actualizări prin email">Actualizări 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( 'Vezi coșul tău de cumpărături', 'woothemes' ); ?>"><?php echo sprintf( _n( '%d produs', 'Coșul meu (%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>

Totuși, acest cod strică site-ul dacă plugin-ul WooCommerce nu este activat. Cum pot verifica dacă plugin-ul WooCommerce este activat?

0
Toate răspunsurile la întrebare 6
7
36

Puteți verifica dacă clasa 'WooCommerce' există, apoi să rulați codul care necesită WooCommerce.

<?php
if ( class_exists( 'WooCommerce' ) ) {
  // cod care necesită WooCommerce
} else {
  // se pare că nu aveți WooCommerce activat
}
?>
26 aug. 2014 18:42:54
Comentarii

class_exists('WooCommerce') va returna false, dacă codul este plasat în functions.php în timp ce "se activează pluginul" (pluginul va fi activat după ce verifici existența clasei WooCommerce).

pyronaur pyronaur
28 ian. 2015 13:58:52

Deci acest lucru ar returna false dacă cineva încarcă pagina exact în momentul în care pluginul este în curs de activare?

hereswhatidid hereswhatidid
28 ian. 2015 16:49:48

Nu poți încărca la "momentul exact", poți încărca cu 1ms înainte sau după.

Este important să fii atent aici, deoarece, dacă declari o funcție Woo pentru o condiție în care WooCommerce nu există (cum ar fi propria ta funcție is_woocommerce()), atunci vei primi o eroare fatală în momentul încerci să activezi WooCommerce Plugin, deoarece vei înregistra mai întâi funcția ta, iar abia apoi WooCommerce va încerca să înregistreze funcția lor is_woocommerce(), iar acest lucru va provoca o eroare fatală și va împiedica activarea pluginului WooCommerce.

pyronaur pyronaur
29 ian. 2015 18:14:04

Cum ar împiedica asta WooCommerce să se încarce? Dacă ai denumit o funcție care coincide cu ceva din WooCommerce?

hereswhatidid hereswhatidid
29 ian. 2015 18:28:45

Ar declanșa o Eroare Fatală, "Cannot redeclare function is_woocommerce". Încearcă.

pyronaur pyronaur
30 ian. 2015 16:35:58

Corect, dar ideea mea este că ar eșua doar dacă ai declarat o funcție care este deja declarată în WooCommerce. Simpla detectare a existenței ei într-o temă, așa cum se menționează în întrebare, nu ar fi afectată de acest lucru.

hereswhatidid hereswhatidid
30 ian. 2015 17:37:53

Da, și nu mă cert cu tine, doar postez informații relevante, pentru cazul în care cineva decide să redeclareze o funcție dacă WooCommerce nu există

pyronaur pyronaur
5 feb. 2015 11:38:14
Arată celelalte 2 comentarii
3
13

Pentru a verifica dacă WooCommerce sau orice alt plugin este activ, inserează următorul cod în template-ul unde dorești să afișezi mesajul.

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    echo 'WooCommerce este activ.';
} else {
    echo 'WooCommerce nu este activ.';
}
2 feb. 2016 22:54:50
Comentarii

Acest răspuns pare să fie metoda oficială de a face acest lucru. Vezi https://docs.woothemes.com/document/create-a-plugin/ .

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

Aceasta este greșit, deoarece nu funcționează pe multisite, documentația lor este incorectă, folosește class_exist în schimb.

Goran Jakovljevic Goran Jakovljevic
8 iun. 2016 14:19:32

class_exist nu detectează woocommerce pe multisite pentru mine (WP 5.4.1, WC 4.1) Răspunsul lui @Arshid KK de mai jos funcționează: https://wordpress.stackexchange.com/a/274000/34517

Larzan Larzan
16 mai 2020 23:04:59
1

Folosește următorul cod. Va funcționa și pe multi-site.

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'woocommerce/woocommerce.php') ) {
  // Fă ce dorești în cazul în care WooCommerce este instalat
}
20 iul. 2017 12:51:03
Comentarii

În acest moment, acesta ar trebui să fie răspunsul acceptat.

Aleksandar Aleksandar
7 ian. 2021 19:12:17
0

Aș verifica clasa după ce toate plugin-urile sunt încărcate. Pentru că în unele cazuri poate returna un fals negativ.

add_action( 'plugins_loaded', 'see_all_plugins_loaded' );

function see_all_plugins_loaded() {
   if ( class_exists( 'WooCommerce' ) ) {
       // faci ce ai de făcut
   }
 }
10 oct. 2022 03:19:16
0

Noul mod oficial de a face acest lucru cu suport pentru multisite:

// Testează dacă WooCommerce este activ (inclusiv activat în rețea).
$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() )
) {
    // Cod personalizat aici. WooCommerce este activ, însă nu este 
    // neapărat inițializat (când acest lucru este important, ia în 
    // considerare utilizarea acțiunii `woocommerce_init`).
}
21 apr. 2023 21:56:01
0

Eu folosesc:

$is_woo = (function_exist('is_woocommerce') || class_exists( 'WooCommerce' ) );
if($is_woo){
    // WooCommerce este activ
}else{
    // WooCommerce nu este activ
}

poți folosi și această metodă simplă:

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 este activ
}else{
    // WooCommerce nu este activ
}
19 oct. 2023 21:31:02