Solution that I use in 2021:
add_action( \'admin_init\', \'my_plugin_check_if_woocommerce_installed\' );
function my_plugin_check_if_woocommerce_installed() {
// If WooCommerce is NOT installed, Deactivate the plugin
if ( is_admin() && current_user_can( \'activate_plugins\') && !is_plugin_active( \'woocommerce/woocommerce.php\') ) {
// Show dismissible error notice
add_action( \'admin_notices\', \'my_plugin_woocommerce_check_notice\' );
// Deactivate this plugin
deactivate_plugins( plugin_basename( __FILE__) );
if ( isset( $_GET[\'activate\'] ) ) {
unset( $_GET[\'activate\'] );
}
}
// If WooCommerce is installed, activate the plugin and carry out further processing
elseif ( is_admin() && is_plugin_active( \'woocommerce/woocommerce.php\') ) {
// Carry out further processing here
}
}
// Show dismissible error notice if WooCommerce is not present
function my_plugin_woocommerce_check_notice() {
?>
<div class="alert alert-danger notice is-dismissible">
<p>Sorry, but this plugin requires WooCommerce in order to work.
So please ensure that WooCommerce is both installed and activated.
</p>
</div>
<?php
}
代码在上运行
\'admin_init\', 而不是“register\\u activation\\u hook”,因为它需要WooCommerce才能成功加载和检测。因此,如果未检测到WooCommerce,它将执行以下操作:
a) 向管理员显示关于缺少WooCommerce的可驳回错误通知。这是非常优雅的,因为它不使用“wp\\u die”。
b) 自动停用自定义插件。
如果检测到WooCommerce,您可以根据需要继续添加菜单链接等。
CAVEATS:
上述解决方案的前提是WooCommerce插件及其主文件的核心名称仍然是;woocommerce;。如果这种情况在未来任何时候发生变化,那么支票将被打破。因此,为了使这段代码在当时起作用,应该在上述代码中更新当前的WooCommerce目录名和主文件名if
检查和elseif
检查
请注意,如果WooCommerce和您的插件都已成功安装并运行,那么如果您出于任何原因随时停用WooCommerce,那么它也会自动停用您的插件。