Jak uzyskać aktualny katalog wtyczek w WordPress?

Muszę uzyskać bieżący katalog wtyczek, np

[wordpress_install_dir]/wp-content/plugins/plugin_name

(jeśli getcwd() zostanie wywołane z wtyczki, zwróci [wordpress_install_dir], katalog główny instalacji)

dzięki za pomoc


person bog    schedule 27.06.2010    source źródło


Odpowiedzi (10)


Patrząc na twoją własną odpowiedź @Bog, myślę, że chcesz;

$plugin_dir_path = dirname(__FILE__);
person TheDeadMedic    schedule 28.06.2010
comment
W PHP 5.3 możesz użyć nowej stałej __DIR__, która osiąga to samo. - person dave1010; 09.06.2011
comment
Jesteś prawie na miejscu. Do licha, nazwałeś nawet zmienną tak samo, jak wbudowaną funkcję WordPress, która robi, co chcesz. Zabezpiecz swój kod na przyszłość, korzystając z zalecanej funkcji WordPress, aby robić, co chcesz. Zobacz moją odpowiedź. - person Tom Auger; 03.04.2012
comment
@TomAuger plugin_dir_path( $file ) jest jedynie opakowaniem dla trailingslashit( dirname( $file ) ) - twierdzę, że nie jest bardziej przyszłościowy niż mój; jedyną różnicą jest ukośnik końcowy. - person TheDeadMedic; 04.04.2012
comment
Nie, jest to bardziej przyszłościowe, ponieważ jeśli główny zespół z jakiegoś powodu zdecyduje się zmienić architekturę lub mechanikę, zmodyfikuje funkcję plugin_dir_path(), aby odzwierciedlić tę zmianę, podczas gdy bezpośrednie wywołanie dirname( $file ) byłoby wtedy na mieliźnie. Jeśli w rdzeniu istnieje funkcja, użyj jej, nawet jeśli wydaje się tylko bezsensownym opakowaniem. - person Tom Auger; 04.04.2012
comment
Nie zrozum mnie źle, rozumiem, że to właściwy sposób WordPress. Ale powiedzmy sobie jasno; jedynym celem tej funkcji jest zwrócenie bezwzględnej ścieżki z ukośnikiem na końcu do katalogu danego pliku. Nawet jeśli został zmodyfikowany lub zmienił się system plików WP, nadal musiałby zwrócić równowartość dirname( __FILE__ ) . '/'. Wszystko inne zagroziłoby funkcjonalności dowolnej wtyczki, która z niej korzysta. - person TheDeadMedic; 05.04.2012
comment
jest to ważne tylko wtedy, gdy plik wywołujący znajduje się w katalogu głównym wtyczki. Jeśli na przykład we wtyczce znajdują się podfoldery i wywołasz je z poziomu jednego z tych folderów, otrzymasz ścieżkę do tego podfolderu! - person Dave Amphlett; 11.10.2013

Dlaczego nie skorzystać z podstawowej funkcji WordPressa, która została zaprojektowana specjalnie do tego celu?

<?php plugin_dir_path( __FILE__ ); ?>

Zobacz dokumentację Kodeksu tutaj.

Masz także

<?php plugin_dir_url( __FILE__ ); ?>

jeśli szukasz adresu URI, a nie ścieżki serwera.

Zobacz dokumentację Kodeksu tutaj.

IMO zawsze najlepiej jest zastosować metodę najwyższego poziomu dostępną w rdzeniu i to wszystko. Dzięki temu Twój kod będzie bardziej przyszłościowy.

person Tom Auger    schedule 13.10.2011
comment
Co więcej, jeśli próbujesz uzyskać dostęp do zasobu w lokalizacji powiązanej z katalogiem tej wtyczki, użyj plugins_url( 'images/image_inside_plugin_folder.png' , __FILE__ ) - person Tom Auger; 31.10.2011
comment
To jest poprawna odpowiedź. WP_PLUGIN_URL nie będzie działać, jeśli wtyczka będzie używana jako wtyczka MU (trzeba jej używać), podczas gdy plugin_dir_path() i plugin_dir_url() będą działać. - person Andy; 29.12.2011
comment
Dziękujemy za przekazanie dokumentu kodeksu. Odkryłem, że FILE załatwiło mi sprawę. - person Ian; 17.06.2012
comment
@Andy, jeśli masz wtyczkę mu i używasz metody loading.php, wówczas plugin_dir_url() zmienia się na wp-content/mu-plugin, a nie na wp-content/mu-plugin/your-plugin-name, więc twój komentarz jest tylko częściowo poprawne. - person Josh J; 26.08.2014
comment
Pomimo nazwy, plugin_dir_path niekoniecznie pobiera katalog wtyczki, pobiera katalog nadrzędny ścieżki podanej jako pierwszy argument. Zatem jeśli __FILE__ nie znajduje się w katalogu wtyczek, plugin_dir_path( __FILE__ ) nie zwróci katalogu wtyczek. Zobacz więcej informacji na temat plugin_dir_path - person Flimm; 11.10.2017
comment
Podczas próby użycia plugin_dir_url otrzymuję zabroniony dostęp. - person Jovanni G; 27.04.2018

To faktycznie da pożądany rezultat:

<?php plugin_dir_url(__FILE__); ?>

http://codex.wordpress.org/Function_Reference/plugin_dir_url

person brenjt    schedule 21.02.2012
comment
Zwraca adres URL, a nie nazwę ścieżki serwera. Chociaż w niektórych przypadkach jest to przydatne, tak naprawdę nie jest to odpowiedź na pytanie. - person Luke; 09.03.2013
comment
próbowałem tego użyć, ale otrzymuję zabroniony dostęp - person Jovanni G; 27.04.2018

Aby uzyskać katalog wtyczek, możesz użyć funkcji Wordpress plugin_basename($file). Aby wyodrębnić folder i nazwę pliku wtyczki, użyjesz poniższej instrukcji:

$plugin_directory = plugin_basename(__FILE__); 

Można to połączyć z adresem URL lub ścieżką serwera katalogu wtyczek. Dlatego możesz użyć stałych WP_PLUGIN_URL, aby uzyskać adres URL katalogu wtyczki lub WP_PLUGIN_DIR, aby uzyskać ścieżkę serwera. Ale jak wspomniał Mark Jaquith w komentarzu poniżej, działa to tylko wtedy, gdy wtyczki znajdują się w katalogu wtyczek Wordpress.

Więcej informacji na ten temat znajdziesz w kodeksie WordPress.

person stefanglase    schedule 27.06.2010
comment
Nie używaj WP_PLUGIN_URL ani WP_PLUGIN_DIR — wtyczki mogą nie znajdować się w katalogu wtyczek. - person Mark Jaquith; 20.08.2011
comment
Dziękuję, dodałem to do mojej odpowiedzi. - person stefanglase; 20.08.2011

$full_path = WP_PLUGIN_URL . '/'. str_replace( basename( __FILE__ ), "", plugin_basename(__FILE__) );
  • WP_PLUGIN_URL – adres URL katalogu wtyczek
  • WP_PLUGIN_DIR – ścieżka serwera do katalogu wtyczek

Ten link może być pomocny: http://codex.wordpress.org/Determining_Plugin_and_Content_Directories.

person manish nautiyal    schedule 14.09.2011

Spróbuj tego:

function PluginUrl() {

        //Try to use WP API if possible, introduced in WP 2.6
        if (function_exists('plugins_url')) return trailingslashit(plugins_url(basename(dirname(__FILE__))));

        //Try to find manually... can't work if wp-content was renamed or is redirected
        $path = dirname(__FILE__);
        $path = str_replace("\\","/",$path);
        $path = trailingslashit(get_bloginfo('wpurl')) . trailingslashit(substr($path,strpos($path,"wp-content/")));
        return $path;
    }

echoUrl wtyczki(); zwróci bieżący adres URL wtyczki.

person Pennywise83    schedule 01.07.2010

Od wersji WP 2.6.0 możesz używać metody plugins_url().

person Idham Perdameian    schedule 03.05.2014
comment
Zwraca adres URL, a nie ścieżkę systemu plików. - person Flimm; 11.10.2017
comment
@Flimm, dzięki małej sztuczce możesz uzyskać pełną ścieżkę systemu plików wtyczki: str_replace(site_url('/'), ABSPATH, plugins_url()); - person Idham Perdameian; 12.10.2017

Kiedy potrzebuję uzyskać katalog, nie tylko dla wtyczek (ścieżka_katalogu_wtyczek), ale także bardziej ogólny, możesz użyć __DIR__, otrzymasz ścieżkę do katalogu pliku, który nazywa się . Teraz możesz używać z functions.php lub innego pliku!

Opis:

Katalog pliku. Jeśli zostanie użyte wewnątrz dołączenia, zwracany jest katalog dołączonego pliku. Jest to odpowiednik nazwykatalogu(__FILE__). Ta nazwa katalogu nie ma końcowego ukośnika, chyba że jest to katalog główny. 1

person Francisco Corrales Morales    schedule 10.09.2014

Jeśli chcesz uzyskać bieżącą ścieżkę katalogu w pliku, możesz użyć magicznych stałych __FILE__ i __DIR__ z funkcją plugin_dir_path() jako:

$dir_path = plugin_dir_path( __FILE__ );

Ścieżka bieżącego katalogu:

/home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/

__FILE__ magiczna stała zwraca bieżącą ścieżkę katalogu.

Jeśli chcesz przejść o jeden poziom wyżej od bieżącego katalogu. Powinieneś użyć magicznej stałej __DIR__ jako:

Aktualna ścieżka:

/home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/

$dir = plugin_dir_path( __DIR__ );

Ścieżka o jeden poziom wyżej:

 /home/user/var/www/wordpress_site/wp-content/plugins/

__DIR__ magiczna stała zwraca ścieżkę katalogu o jeden poziom wyżej.

person Gufran Hasan    schedule 24.04.2018

W głównym pliku PHP wtyczki działa to tylko w trybie admin:

$plugin_data = get_plugin_data( __FILE__ );
$plugin_name = $plugin_data['Name'];
person Malki Mohamed    schedule 16.04.2021