从技术上讲,这是可能的。但我会使用稍微不同的方法。如果您的第二个插件首先加载,则会出现错误。如果您想替换另一个插件中的类,那么很难做到这一点。
因此,钩住plugins_loaded
以特定的优先级创建对象,并在同一挂钩上的第二个插件中以较低(稍后)优先级使用该对象:
插件1
add_action( \'plugins_loaded\', array ( \'My_Class\', \'init\' ), 10 );
class My_Class
{
/**
* Handler for the action \'init\'. Instantiates this class.
*
* @since 0.1
* @return void
*/
public static function init()
{
// Named global variable to make access for other scripts easier.
$GLOBALS[ __CLASS__ ] = new self;
}
public function __construct() { /* Do something awesome. */ }
}
插件2
add_action( \'plugins_loaded\', \'depending_operation\', 11 );
function depending_operation()
{
if ( empty ( $GLOBALS[ \'My_Class\' ] ) )
{
return;
}
/* Do something awesome again. */
}
注意10和11英寸
add_action()
? 这保证了您的第二个插件永远不会在第一个插件之前运行。它仍然需要检查第一个插件是否处于活动状态并正常工作。
现在,您甚至可以在另一个插件中替换该类:
插件3
add_action( \'plugins_loaded\', \'replace_global_class\', 12 );
function replace_global_class()
{
$GLOBALS[ \'My_Class\' ] = new Replacement_Class;
}
class Replacement_Class {}