Wordpress - How to use classes declared in another plugin?

You have to check if the class exists, but before that you have to wait that all plugin are loaded: no one can assure that your plugin is loaded after WooCommerce.

For run a code from plugin when all plugin are loaded hook into plugins_loaded hook.

Be aware that you cannot use this hook in a theme, because when theme load that hook was already fired.

add_action('plugins_loaded', 'my_coupon_init');

function my_coupon_init() {
  if ( class_exists('WC_Coupon') ) {
    $coupon = new WC_Coupon($some_code);
    // some code here
  } else {
    add_action('admin_notices', 'wc_not_loaded');
  }
}

function wc_not_loaded() {
    printf(
      '<div class="error"><p>%s</p></div>',
      __('Sorry cannot create coupon because WooCommerce is not loaded')
    );
}

This is too late but I would like to share how to use woocommerce and its classes without having an error class not found.

First is to check if woocommerce is installed and use the woocommerce_loaded action hook.

/**
 * Check if WooCommerce is active
 **/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    // Put your plugin code here

    add_action('woocommerce_loaded' , function (){
         //Put your code here that needs any woocommerce class 
         //You can also Instantiate your main plugin file here 
    });

}

I hope this helps someone.


The proper way would be :

 if( class_exists('WC_Coupon') ) $coupon = new WC_Coupon($some_code);

It's better to check if class exists before using it, it avoids fatal error if the plugin is disabled.

You can't redeclare a class it's not allowed in PHP.

You can also extend class :

class My_WC_Coupon extends WC_Coupon {
   //some code
   //some hook
}

But most of the time and in this case with WooCommerce you'd better find a hook in documentation that will handle the job.

Tags:

Plugins

Oop