web-dev-qa-db-de.com

Wie kann ich eine Funktion von einem Plugin in einem anderen Plugin aufrufen?

Ich habe ein einfaches Plugin im Admin-Optionsfeld für Ereignisse.

Ich möchte eine Funktion aufrufen, die aus einem anderen Social-Media-Plugin stammt ( Mingle ). Ich kann die Plugin-Funktionen im Theme aufrufen, aber anscheinend nicht innerhalb der Kerndateien anderer Plugins oder der Admin-Panels anderer Plugins.

Ich habe versucht, die Dateien der anderen Plugins einzubeziehen, einen Hook zu der Theme-Funktionsdatei, add_action, add_filter, init usw. hinzuzufügen. Ich weiß jedoch nicht, wie das erste Argument für diese Aktionen lauten soll, da ich die Funktion in einen bestimmten Administrator einfügen möchte Seite von einem anderen Plugin.

Die einzige Lösung, die funktioniert hat, ist das Zusammenführen des Codes der beiden Plugins, obwohl es seltsam erscheint, dass es keine einfachere Methode gibt.

6
Graham

Vielleicht sollten Sie versuchen, die Funktionen Ihres Plugins mit der Aktion plugins_loaded aufzurufen.

Plugin A

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

Plugin 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();
}

Laut Codex wird die Aktion plugins_loaded ausgelöst, nachdem alle Plugins geladen wurden. Stellen Sie also sicher, dass alle Plugins geladen wurden, bevor Sie eine Funktion von einem anderen Plugin aufrufen.

7
noquierouser

Um eine Funktion von einem Plugin in ein anderes Plugin aufzurufen (inception?), Können Sie Folgendes versuchen:

Sie können es versuchen, indem Sie die gewünschte Funktion überprüfen, bevor Sie etwas anderes tun.

Plugin A:

function from_plugin_alpha( some_thing ) {
    // do stuff
}

Plugin B:

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

Dadurch wird überprüft, ob die Funktion vorhanden ist, bevor Sie Ihren benutzerdefinierten Code ausführen.