Używam WordPress 3.0.5 i przetestowałem z 3.1rc4. W głównym pliku PHP mojej wtyczki, kiedy próbuję wywołać is_plugin_active, dostaję Call to undefined function is_plugin_active()
. Mogę zadzwonić do add_action i add_filter. Co powinienem sprawdzić / zmienić, aby to naprawić?
Dzieje się tak wewnątrz administratora na stronie wtyczek. Na górze mojego głównego pliku wtyczki mam, if (function_exists('is_plugin_active')) {
który zawsze zwraca false.
Nie widzę też funkcji z mojego głównego pliku wtyczek w innych wtyczkach (jeśli to pomaga).
function_exists('is_plugin_active')
jest to fałsz, gdy jest wywoływany z głównego pliku wtyczki, jeśli jest poza metodą, ale jest prawdziwy, gdy jest wywoływany w metodzie, która jest wywoływana dlaactivated_plugin
akcji.Odpowiedzi:
Dzieje się tak, ponieważ plik, w którym zdefiniowano is_plugin_active () -
wp-admin/includes/plugin.php
- jest ładowany tylko do administratora, po załadowaniu wtyczki.Dlatego możesz wywoływać go tylko po uruchomieniu „admin_init”:
źródło
Możesz wywoływać funkcję is_plugin_active () w szablonach i na stronach użytkownika, co może być przydatne w przypadku powiązanych wtyczek (tj. Wymaga wtyczki „xyz” do obsługi mojej nowej wtyczki). Musisz ręcznie dołączyć plik plugin.php, jak zauważono w dokumentacji is_plugin_active () w Codex.
Oto funkcjonalny przykład, którego używam w moich pakietach dodatków premium, aby upewnić się, że wtyczka wolnej bazy jest aktywna przed wywołaniem obiektu dodatku. Wymaga, aby niektóre wtyczki i filtry były dostępne we wtyczce podstawowej, w przeciwnym razie ulegnie awarii.
Nawiasem mówiąc, jeśli masz problemy z is_plugin_active () z poziomu aktywnego logowania administratora, prawdopodobnie jest tak, ponieważ testujesz przed uruchomieniem admin_init. admin_menu odpala przed admin_init i wykonywanie testów w admin_menu już wcześniej mnie „ugryzło”. Nazwa „admin_init”, która wydaje mi się sprzeczna z intuicją, ponieważ menu admin_menu jest już uruchomione. Myślę, że init jest „pierwszą rzeczą do uruchomienia” ... może admin_kinda_init () byłby lepszy. :)
źródło
include_once(ABSPATH.'wp-admin/includes/plugin.php');
pomogło mi. Dzięki!Szybkim i brudnym obejściem byłoby ręczne skopiowanie funkcji:
Jest dość krótki, więc nie powinno być zbyt trudne do wdrożenia we własnym kodzie jako obejście.
źródło
Proste i łatwe. Zaczerpnięte z WP
a następnie wszelkie wystąpienia
uzyskać kontrolę działania. TAK, nigdy więcej błędów.
źródło
requireonce
, prawdopodobnie nie musisz sprawdzać funkcji ...?Wolałem odpowiedź Toma Augera, jak zdefiniować własną funkcję is_plugin_active zamiast włączać plugin.php. Jednak użycie tej samej nazwy funkcji spowodowało awarię mojego obszaru administracyjnego. Użycie innej nazwy funkcji rozwiązało to:
źródło
Czy korzystasz
is_plugin_active
z interfejsu administratora lub interfejsu użytkownika? Jestem prawie pewien, żeis_plugin_active
jest to tylko funkcja administratora, która znajduje się w wp-admin / obejmuje / plugin.php.Ponadto, czy główny plik wtyczki korzysta z Nagłówka pliku Wordpress ? Czy Twoja wtyczka jest dołączana po załadowaniu powyższego pliku plugin.php?
źródło
Aby debugować aktywne wtyczki:
Aby sprawdzić konkretną wtyczkę:
Działanie nosi nazwę
active_plugins
„IIRC.źródło
Żadne z tych rozwiązań nie działało dla mnie, ale działało:
Znalazłem to rozwiązanie na codebangers.com
źródło