web-dev-qa-db-ja.com

あるプラグインから別のプラグイン内の関数を呼び出すにはどうすればいいですか?

イベントの管理オプションパネルに基本的なプラグインがあります。

私は別のソーシャルメディアプラグインからの機能を呼び出したい( Mingle )。私はテーマの中でプラグイン関数を呼び出すことができますが、他のプラグインのコアファイル、または他のプラグインの管理パネルの中ではそれができません。

他のプラグインのファイルを含めること、テーマ関数ファイルにフックを追加すること、add_actionadd_filterinitなどを試してみました。他のプラグインからのページ。

2つのプラグインのコードをマージすることで解決した唯一の解決策はありますが、もっと単純な方法がないことは奇妙に思えます。

6
Graham

たぶんあなたはplugins_loadedアクションを使ってあなたのプラグインの関数を呼んでみるべきです。

プラグインA

class PluginA {
  public function func_a() {
    // do stuff
  }
}

プラグインB

class PluginB {
  function functB() {
    if (class_exists('PluginA')) {
      //do stuff that depends of PluginA
    }
  }
}

add_action('plugins_loaded', 'call_plugin_a_using_plugin_b');
function call_plugin_a_using_plugin_b() {
  PluginB::functB();
}

Codex によると、すべてのプラグインがロードされた後にplugins_loadedアクションが起動するので、他のプラグインから関数を呼び出す前にすべてのプラグインがロードされていることを確認してください。

7
noquierouser

あるプラグインから別のプラグインの関数を呼び出す(インセプション?)には、次のログインを試すことができます。

他のことをする前に、あなたが欲しい機能をチェックすることによって試すことができます。

プラグインA:

function from_plugin_alpha( some_thing ) {
    // do stuff
}

プラグインB:

function from_plugin_bravo() {
    if ( !function_exists( 'from_plugin_alpha' ) ) {
        return;
    }
    from_plugin_alpha( some_thing );
}

これはあなたのカスタムコードを実行する前にその関数が存在することをチェックします。