我在一些插件的开头做了一个简单的依赖性检查,检查是否安装了另一个插件并处于活动状态(使用class_exists()
).
这在正常的WordPress流程中效果很好,因为包含所需类的插件被设置为更早实例化,我还重新排序了可用的插件,以便首先加载该插件,如下所示:
/**
* Force this plugin to load first
*
* @since 0.1
* @return void
*/
public function load_this_plugin_first()
{
// grab plugin directory + file name ##
$path = plugin_basename(dirname(__FILE__)).\'/\'.basename(__FILE__);
// grab the list of active plugins ##
if ( $plugins = get_option( \'active_plugins\' ) ) {
// check if out plugin is in there ##
if ( $key = array_search( $path, $plugins ) ) {
// push it to the top of the list ##
array_splice( $plugins, $key, 1 );
array_unshift( $plugins, $path );
update_option( \'active_plugins\', $plugins );
}
}
}
这一切都很好,直到我需要更新一个插件-然后其他插件都被停用-因为所有
class_exists()
检查返回false。
所以,我想知道是否有一个常量,比如为插件更新执行\\u AUTOSAVE,比如执行\\u plugin\\u UPDATE?
SO网友:Q Studio
使用WP\\U安装如何?-此检查位于主插件类上方。。。
if ( ! class_exists( \'REQUIRED_CLASS_NAME\' ) && ! defined( \'WP_INSTALLING\' ) ) {
// give some notice to the user ##
add_action(\'admin_notices\', function(){
$plugin = get_plugin_data( __FILE__ );
echo "<div id=\'message\' class=\'error\'><p><code>".$plugin["Name"]."</code> has been deactivated because it requires the <a href=\'#\'>PLUGIN NAME</a>.</p></div>";
if ( isset( $_GET[\'activate\'] ) ) {
unset( $_GET[\'activate\'] ); // remove the activation notice ##
}
});
// turn this plugin off ##
add_action(\'admin_notices\', function(){
deactivate_plugins( plugin_basename( __FILE__ ) );
});
// stop this plugin from running ##
return;
}
那么实际的插件类如下:
if ( ! class_eixsts( "Plugin_Class" ) )
{
Plugin_Class()
{
...
}
}