Uzyskaj ścieżkę do innej wtyczki

10

Aby uzyskać ścieżkę do wtyczki, możesz użyć plugin_dir_path(__FILE__)- ale oczywiście należy ją wywołać z poziomu wtyczki.

Jak w wiarygodny sposób uzyskać ścieżkę do wtyczki B ( pluginb/pluginb.php) z wtyczki A?

Edycja: Zakłada się, że znasz ślimak wtyczki, której szukasz (właściwie możesz je pobrać get_plugins()). Ale chciałbym, żeby to działało ogólnie.

Stephen Harris
źródło
Czy dotyczyłoby to jakiejkolwiek wtyczki? czy w szczególności jeden / kilka? Jeśli to drugie, czy są to twoje własne czy publiczne wydania?
TheDeadMedic
Zakładam więc, że znasz informacje o wtyczce, której szukasz: np. pluginb/pluginb.phpAle jest to firma zewnętrzna.
Stephen Harris,

Odpowiedzi:

9

Moje najlepsze przypuszczenie to:

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

return $dir;

Jednak niebezpieczeństwem jest nadal założenie „basename” wtyczki - dobrze napisana wtyczka będzie nadal działać, nawet jeśli jej katalog i / lub główny plik zostaną zmienione (z dowolnego powodu).

Wracając do mojego oryginalnego komentarza - w zależności od wtyczki innej firmy, o której mowa, wielu autorów definiuje swoje własne metody / stałe utrzymujące ścieżkę wtyczki - warto sprawdzić ich istnienie i użyć ich (jeśli są dostępne) ).

TheDeadMedic
źródło
Ach, ok, zaktualizowałem pytanie :). Możesz pobrać wtyczkę z get_plugins()- w moim przypadku jest jej dość. Jeśli szukasz konkretnej wtyczki i nic lepszego nie jest dostępne, myślę, że możesz wyszukać wtyczkę po nazwie w get_plugins().
Stephen Harris,
+1 Idealnie chciałbym unikać używania stałych - ale to rozwiązanie przynajmniej sprawdza, kiedy ich używa się :) - i tak wygląda rdzeń.
Stephen Harris,
2

Tak więc jedną metodą jest wywołanie plugin_dir_path()w ramach bieżącej wtyczki i zastąpienie własnej nazwy katalogu wtyczek nazwą tej wtyczki, której szukasz ( pluginb/pluginb.php):

W naszym tak plug-in 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
źródło
Odradzałbym to, ponieważ istnieje założenie, że wtyczka B znajduje się w tym samym katalogu co A (co niekoniecznie tak będzie, na przykład wtyczki MU).
TheDeadMedic,
Dzięki, pomyślałem, że będzie coś, za czym tęsknię :)
Stephen Harris,