Holen Sie sich einen Pfad zu einem anderen Plugin

10

Um den Pfad zu einem Plugin zu erhalten, können Sie diesen verwenden plugin_dir_path(__FILE__)- dies muss jedoch offensichtlich aus dem Plug-In heraus aufgerufen werden.

Wie können Sie den Pfad zu Plugin B ( ) innerhalb von Plug-In A zuverlässig ermittelnpluginb/pluginb.php ?

Bearbeiten: Es wird davon ausgegangen, dass Sie den Slug des Plug-Ins kennen, nach dem Sie suchen (tatsächlich können Sie sie von erhalten get_plugins()). Aber ich möchte, dass es allgemein funktioniert.

Stephen Harris
quelle
Würde dies für ein Plugin gelten? oder insbesondere eine / mehrere? Wenn letztere, sind sie Ihre eigenen oder öffentliche Veröffentlichungen?
TheDeadMedic
Ich gehe also davon aus, dass Sie den Slug des Plug-Ins kennen, nach dem Sie suchen: z. B. pluginb/pluginb.phpdessen Drittanbieter.
Stephen Harris

Antworten:

9

Meine beste Vermutung wäre:

if ( ! is_file( $dir = WPMU_PLUGIN_DIR . '/pluginb/pluginb.php' ) ) {
    if ( ! is_file( $dir = WP_PLUGIN_DIR . '/pluginb/pluginb.php' ) )
        $dir = null;
}

return $dir;

Die Gefahr besteht hier jedoch immer noch in der Annahme des "Basisnamens" des Plugins - ein gut geschriebenes Plugin funktioniert auch dann noch, wenn sein Verzeichnis und / oder seine Hauptdatei umbenannt wurden (aus welchem ​​Grund auch immer).

Was auf meinen ursprünglichen Kommentar zurückgeht - je nachdem, auf welches Plugin eines Drittanbieters sich dies bezieht, definieren viele Autoren ihre eigenen Methoden / Konstanten, um den Plugin-Pfad zu speichern - wäre es sinnvoll, ihre Existenz zu überprüfen und diese stattdessen zu verwenden (falls verfügbar) ).

TheDeadMedic
quelle
Ah ok, ich habe die Frage aktualisiert :). Sie können den Plug-Ins-Slug von erhalten get_plugins()- in meinem Anwendungsfall gibt es genug. Wenn Sie nach einem bestimmten Plug-In suchen und nichts Besseres verfügbar ist, können Sie das Plug-In über den Namen in suchen get_plugins().
Stephen Harris
+1 Möchte im Idealfall die Verwendung von Konstanten vermeiden - aber diese Lösung prüft zumindest, ob sie verwendet werden :) - und so scheint der Kern die Dinge zu tun.
Stephen Harris
2

Eine Methode besteht also darin, plugin_dir_path()das aktuelle Plug-In aufzurufen und Ihren eigenen Plugin-Verzeichnisnamen durch den des Slugs des Plug-Ins zu ersetzen, nach dem Sie suchen ( pluginb/pluginb.php):

Also innerhalb unseres Plugins plugina/plugina.php,

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';
Stephen Harris
quelle
Ich würde davon abraten, da davon ausgegangen wird, dass sich Plugin B im selben Verzeichnis wie A befindet (was nicht unbedingt der Fall sein muss, ala MU-Plugins).
TheDeadMedic
Danke, dachte, es würde etwas geben, das ich vermissen würde :)
Stephen Harris