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.