Jeden z moich motywów Wordpress wymaga poprawnego działania kilku wtyczek innych firm.
W większości przypadków wywoływałem funkcje z wtyczek firm trzecich przy użyciu instrukcji warunkowych, takich jak
if(function_exist('plugin_function')) {
plugin_function() // do something
}
przypuśćmy, że muszę korzystać z jednej wtyczki w wielu plikach mojego motywu ... Chciałbym uniknąć używania wielu warunków JEŻELI ... czy istnieje właściwy sposób, aby wymagać zainstalowania określonej wtyczki w WP lub nawet lepiej ją zainstalować jeśli ich brakuje przed aktywowaniem motywu?
dzięki
źródło
function_exists
, zwykły użytkownik po prostu otrzyma wiadomość, że nie zainstalował wtyczki, na której opiera się inna wtyczka. Problem polega na tym, że użytkownik rzeczywiście będzie mieć zainstalowane wtyczki, a następnie po prostu zastanawiam się, dlaczego to doens't pracy . Och, i nie zamierzam cię za to głosować.Chociaż nie zapobiegnie to zerwaniu motywu, gdy wtyczka jest wyłączona, przyjrzałbym się zręcznemu artykułowi na temat wtyczki „Jak wyświetlić powiadomienie administratora o wymaganych motywach” . Nigdy nie czułem się dobrze z pomysłem na motyw zmuszający do zainstalowania wtyczki, więc wydaje się, że to kolejna najlepsza opcja.
Kolejna szybka myśl: nigdy tego nie próbowałem, ale zastanawiam się, czy możesz wymyślić jakiś sprytny sposób na umieszczenie wielu haczyków w jednym warunku. Być może możesz oddzielić wszystkie funkcje warunkowe w innym pliku i wymagać go tylko w przypadku
if( function_exists( 'plugin_function' ) )
powrotutrue
(przy założeniu, że jest to niedokładna kontrola).źródło
Jeśli potrzebujesz tylko strony wtyczki, to jest
is_plugin_active()
. Jeśli potrzebujesz go na zewnątrz, lepiej skopiuj / wklej podstawową funkcję do swojego motywu, a następnie użyj go ponownie:Warunkowe pozwala uniknąć błędów z podwójnym zdefiniowaniem funkcji.
źródło
if(function_exist('plugin_function'))
sięif(is_plugin_active('plugin-file.php'))
Uwaga: ta odpowiedź jest właśnie tutaj, aby ułatwić dyskusję między @scribu a @kaiser. Mody: Proszę nie usuwać. Użytkownicy / czytelnicy: Proszę nie głosować. Jeśli chcesz śledzić dyskusję, zajrzyj do dziennika zmian / edycji. Jeśli chcesz dołączyć do dyskusji, edytuj odpowiedź. Jeśli dyskusja przyniesie wynik, zostanie oznaczona jako taka. Dziękuję Ci.
Scenariusze
Istnieją również różne scenariusze, które różnią się wagą, w których można mieć zależność od wtyczek. (Przykłady są tylko fikcyjne). Słowo „(nadrzędny) Plugin” można zamienić na „Theme” z nadrzędnego punktu widzenia.
Poniżej próbuję naszkicować, co się stanie, gdy zaktualizujesz „inną” wtyczkę, a sprawdzenie już nie działa.
Czek
Istnieją trzy możliwości sprawdzenia, czy chcesz wiedzieć, czy wtyczka jest aktywna:
'active_plugins'
- istnieje?Jeśli teraz wezmę przykład mojej wtyczki Internal Link Checker , która nie oferuje publicznego interfejsu API i nie jest przeznaczona do rozszerzenia, nie widzę powodu (jako autora), aby nie zmieniać nazewnictwa funkcji wewnętrznych na żądanie lub po prostu . Więc jeśli ktoś spróbuje zastosować piggyback na tej wtyczce, wtedy rzeczy po prostu się zepsują (w zależności od funkcjonalności i szczelności pakowania) podczas aktualizacji. To samo dotyczy nazw plików. Nie miałbym żadnego prawdziwego powodu (poza tym, że wtyczka zostałaby dezaktywowana podczas aktualizacji), aby nie zmieniać nazwy pliku. Jedyną rzeczą, która powstrzymałaby mnie przed zmianą nazwy folderu jest to, że sprawdzanie aktualizacji i powiadomienie działa z nazwą pliku - jeśli jest przechowywany w oficjalnym repozytorium.
Powiedziałbym więc, że od najsłabszej (łatwej do zmiany) do najtrudniejszej (dużo mówi się przeciwko zmianie) części (macierzystej) wtyczki byłoby:
funkcja »nazwa głównego pliku» folder
Kiedy powiedziałem, że sprawdzanie funkcji jest mniej kruche niż używanie
is_plugin_active()
, założyłem, że dana funkcja jest tą, którą autor wtyczki wyraźnie zachęca. Ostatecznym tego przykładem jestwp_pagenavi()
tag szablonu oferowany przez wtyczkę WP-PageNavi.Trudność w definiowaniu zależności polega na tym, że nie ma standardowego sposobu jednoznacznej identyfikacji wtyczek, które nie wymagają nazw plików.
Więcej przemyśleń na ten temat:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
Myślę, że do tej pory możemy to podsumować w trzech punktach:
(Jak dotąd) najmądrzejszy sposób, w jaki mogę myśleć, że widziałem już w (o wiele za mało) wtyczkach:
Nie zastanawiając się nad tym zbyt szczegółowo, ale myślę, że możesz podpiąć uwagę do filtra „wszystko” i sprawdzić w filtrze prądu, jeśli został on uruchomiony, gdy jesteś na
shutdown
haku…?@scibu To było skierowane na „twój” temat. (Upuściłem już mówiąc o moim). :)
Zasadniczo, jeśli potrzebujesz zależności - a masz miłego autora - może zaoferować hak zamiast / jako zamiennik tagu szablonu. Ponieważ wtyczka zaczepiłaby się tylko, gdyby haczyk był obecny lub po prostu nic nie zrobił. Z drugiej strony nie byłoby błędu, gdy wtyczki nie były obecne.
Oto trudna część (lub więcej pytań): Aby napisać powiadomienie administratora, aby poinformować użytkownika o zależności „Musisz zainstalować» DisneyWonderLinks «”, możesz to sprawdzić
array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. Nie jestem pewien, czy to zadziała, ale afaik powinien być dostępny po obu stronach (publicznej / administracyjnej).To by nie działało. To, że oddzwanianie jest zarejestrowane na przechwytywaniu, nie oznacza, że przechwytywanie zostanie uruchomione zgodnie z oczekiwaniami. Jedyną rzeczą, która byłaby swego rodzaju pracą, jest użycie haka „zamykania”, o którym wspominałeś wcześniej:
Oczywiście byłoby to wydrukowane na samym dole, po
</html>
znaczniku, na froncie (ponieważ tam zwykle używane są znaczniki szablonów), co nie jest zbyt użyteczne.Możesz spróbować zapisać wiadomość w wp_options, a następnie wyświetlić ją w obszarze administracyjnym, ale otworzy to zupełnie nową puszkę robaków: unieważnienie, buforowanie wtyczek itp.
źródło