私はこのようなWordPressのプラグインを作りました:
Class MY_CLASS {
//codes
}
Global $myclass;
$myclass = New MY_CLASS ();
プラグインをインストールして有効化した後、myclass.phpファイルを含めずに他のプラグインでこのクラスを使用できますか?例えば、他のプラグインでは:
Global $myclass;
$myclass->a = 'dog';
技術的には可能です。しかし、私は少し違ったアプローチを使うでしょう。あなたの2番目のプラグインが最初にロードされている場合はエラーになります。他のプラグインのクラスを置き換えたい場合は、これを行うのは困難です。
そのため、オブジェクトを作成するために特定の優先度でplugins_loaded
にフックし、優先度の低い(後で)同じフックの2番目のプラグインのオブジェクトを使用します。
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. */ }
}
add_action( 'plugins_loaded', 'depending_operation', 11 );
function depending_operation()
{
if ( empty ( $GLOBALS[ 'My_Class' ] ) )
{
return;
}
/* Do something awesome again. */
}
add_action()
の10と11に注意してください。これにより、2番目のプラグインが最初のプラグインより前に実行されることは決してありません。最初のプラグインがアクティブで動作しているかどうかを確認する必要があります。
これで他のプラグインのクラスを置き換えることさえできます。
add_action( 'plugins_loaded', 'replace_global_class', 12 );
function replace_global_class()
{
$GLOBALS[ 'My_Class' ] = new Replacement_Class;
}
class Replacement_Class {}
メインプラグインファイルのみが自動的に含まれます。だからあなたのプラグインがこのように構成されているなら:
wp-content/plugins/my-plugin/
my-plugin.php
my-class.php
WordPressに含まれるのはmy-plugin.php
だけです。 my-class.php
ファイルからmy-plugin.php
を含めることで、MyClass
が他の人にも利用可能であることを確認できます。
toschoの答えはとても役に立ちました!あなたがアドオンで拡張可能なプラグインを作っているのであれば、追加するだけで、アドオンはまだOOPになることができます。
class My_Class_Addon(){
public function __construct() { /* Do something awesome as an addon to My_Class */ }
}
add_action( 'plugins_loaded', 'My_Class_Addon_loader', 11 );
function My_Class_Addon_loader(){
if(empty($GLOBALS[ 'My_Class' ])){
return;
}
$this_my_class = new My_Class_Addon();
}