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.


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) ).


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';

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.