To nie jest pytanie o to, jak zbudować wtyczkę WordPress. Raczej, jakie, jeśli w ogóle, przewodniki można zastosować do tego, jak złożyć architekturę plików dowolnej wtyczki.
Niektóre inne języki programowania lub biblioteki mają bardzo kontrolowane sposoby organizowania katalogów i plików. Czasami jest to denerwujące i podkreśla swobodę, jaką oferuje PHP, ale z drugiej strony wtyczki WordPress są zestawiane w dowolny sposób określony przez ich autora.
Nie ma właściwej odpowiedzi , ale mam nadzieję, że dopracuję sposób, w jaki ja i inni tworzymy wtyczki, aby były bardziej przyjazne dla innych programistów, aby się rozłączyli, łatwiej debugować, łatwiej nawigować i być może bardziej wydajne.
Ostatnie pytanie: jaki według Ciebie jest najlepszy sposób na zorganizowanie wtyczki?
Poniżej znajduje się kilka przykładowych struktur, ale w żadnym wypadku nie jest to wyczerpująca lista. Dodaj własne rekomendacje.
Zakładana domyślna struktura
/wp-content
/plugins
/my-plugin
my-plugin.php
Metoda Model View Controller (MVC)
/wp-content
/plugins
/my-plugin
/controller
Controller.php
/model
Model.php
/view
view.php
my-plugin.php
Trzy części MVC:
- W modelu współgra z bazą danych, zapytań oraz zapisywania danych i zawiera logikę.
- Kontroler będzie zawierać szablon tagi i funkcje, że widok będzie wykorzystują.
- Widok odpowiada wyświetlania danych dostarczonych przez model tak skonstruowany przez kontroler.
Organizowane według metody typu
/wp-content
/plugins
/my-plugin
/admin
admin.php
/assets
css/
images/
/classes
my-class.php
/lang
my-es_ES.mo
/templates
my-template.php
/widgets
my-widget.php
my-plugin.php
WordPress Plugin Boilerplate
Dostępne na Github
Na podstawie interfejsu API wtyczki , standardów kodowania i standardów dokumentacji .
/wp-content
/plugins
/my-plugin
/admin
/css
/js
/partials
my-plugin-admin.php
/includes
my_plugin_activator.php
my_plugin_deactivator.php
my_plugin_i18n.php
my_plugin_loader.php
my_plugin.php
/languages
my_plugin.pot
/public
/css
/js
/partials
my-plugin-public.php
LICENSE.txt
README.txt
index.php
my-plugin.php
uninstall.php
Luźno zorganizowana metoda
/wp-content
/plugins
/my-plugin
css/
images/
js/
my-admin.php
my-class.php
my-template.php
my-widget.php
my-plugin.php
źródło
css/
,images/
ijs/
będziestyles/
,images/
iscripts/
.Odpowiedzi:
Pamiętaj, że wszystkie wtyczki są „kontrolerami” według standardów WP.
Zależy to od tego, co ma zrobić wtyczka, ale we wszystkich przypadkach starałbym się oddzielić wyjście ekranu od kodu PHP w jak największym stopniu.
Oto jeden ze sposobów, aby to zrobić z łatwością - najpierw zdefiniuj funkcję, która ładuje szablon:
Teraz, jeśli wtyczka korzysta z widżetu do wyświetlania danych:
Szablon:
Pliki:
Gdzie umieścić CSS, JS, obrazy lub jak zaprojektować pojemnik na haczyki, jest mniej ważne. To chyba kwestia osobistych preferencji.
źródło
To zależy od wtyczki. Oto moja podstawowa struktura dla prawie każdej wtyczki:
To byłoby coś, co trafiłoby do
lib
folderu.Jeśli jest to szczególnie złożona wtyczka z dużą ilością funkcji administracyjnych, dodałbym
admin
folder zawierający wszystkie te pliki PHP. Jeśli wtyczka działa podobnie jak zamiana dołączonych plików motywu , może to oznaczać również foldertemplate
lubtheme
.Struktura katalogów może wyglądać następująco:
źródło
IMHO, najłatwiejszą, najmocniejszą i najłatwiejszą w utrzymaniu trasą jest użycie struktury MVC, a WP MVC jest zaprojektowany tak, aby pisanie wtyczek MVC było bardzo łatwe (choć jestem trochę stronniczy). Dzięki WP MVC możesz po prostu tworzyć modele, widoki i kontrolery, a wszystko inne jest obsługiwane za kulisami.
Dla sekcji publicznej i administracyjnej można tworzyć osobne kontrolery i widoki, a cała platforma wykorzystuje wiele natywnych funkcji WordPress. Struktura pliku i duża część funkcjonalności jest dokładnie taka sama, jak w najpopularniejszych frameworkach MVC (Rails, CakePHP itp.).
Więcej informacji i samouczek można znaleźć tutaj:
źródło
Używamy kombinacji wszystkich metod. Po pierwsze, używamy Zend Framework 1.11 w naszych wtyczkach i dlatego musieliśmy użyć podobnej struktury dla plików klas z powodu mechanizmu automatycznego ładowania.
Struktura naszej podstawowej wtyczki (która jest używana przez wszystkie nasze wtyczki jako podstawa) wygląda podobnie:
webeo-core.php
plik w folderze głównym wtyczki.Webeo_CoreLoader
klasę w tym pliku, która ustawia niektóre stałe wtyczek, inicjuje autoloader klasy i wywołuje metodę instalacjiCore.php
klasy wlib/Webeo
folderze. Działa to naplugins_loaded
haku akcji z priorytetem9
.Core.php
Klasa jest nasz plugin plik bootstrap. Nazwa oparta jest na nazwie wtyczek.Jak widać, w
lib
folderze znajduje się podkatalog dla wszystkich naszych pakietów dostawców (Webeo
,Zend
). Wszystkie paczki podrzędne wewnątrz dostawcy mają strukturę według samego modułu. W przypadku nowegoMail Settings
formularza administratora mielibyśmy następującą strukturę:Nasze sub-wtyczki mają tę samą strukturę z jednym wyjątkiem. Wchodzimy o poziom głębiej do folderu dostawcy, aby rozwiązać konflikty nazw podczas zdarzenia automatycznego ładowania. Nazywamy też klasę boostrap wtyczek
E.g. Faq.php
priorytetem10
wewnątrzplugins_loaded
haka.Prawdopodobnie zmienię nazwę
lib
folderuvendors
i przeniosę wszystkie foldery publiczne (css, obrazy, js, języki) do folderu o nazwiepublic
w następnym wydaniu.źródło
Jak wielu tutaj już odpowiedziało To naprawdę zależy od tego, co powinna zrobić wtyczka, ale oto moja podstawowa struktura:
źródło
Popieram następujący układ wtyczek, jednak zwykle zmienia się on w zależności od wymagań wtyczek.
Muszę jeszcze stworzyć wtyczkę WordPress wymagającą architektury w stylu MVC, ale gdybym to zrobił, ułożyłbym ją w osobnym katalogu MVC, który sam zawiera widoki / kontrolery / modele.
źródło
Moja logika, im większa wtyczka, tym więcej struktury używam.
W przypadku dużych wtyczek zwykle używam MVC.
Używam tego jako punktu wyjścia i pomijam to, co nie jest potrzebne.
źródło
Wszystkie moje wtyczki mają tę strukturę, która wydaje się być bardzo podobna do tego, co robi większość innych programistów:
plugin-folder.php to zazwyczaj klasa, która ładuje wszystkie wymagane pliki z folderu core /. Najczęściej na haku init lub plugins_loaded.
Kiedyś też prefiksowałem wszystkie moje pliki, ale jak zauważyłem @kaiser powyżej, jest to naprawdę zbędne i ostatnio postanowiłem usunąć go z wszelkich przyszłych wtyczek.
Biblioteka / folder zawiera wszystkie zewnętrzne biblioteki pomocnicze, od których wtyczka może zależeć.
W zależności od wtyczki w katalogu głównym wtyczki może znajdować się również plik uninstall.php. Jednak przez większość czasu jest to obsługiwane przez register_uninstall_hook ().
Oczywiście niektóre wtyczki mogą nie wymagać plików administratora, szablonów itp., Ale powyższa struktura działa dla mnie. W końcu musisz po prostu znaleźć strukturę, która działa dla ciebie, a następnie trzymać się jej.
Mam również wtyczkę startową, opartą na powyższej strukturze, której używam jako punktu wyjścia dla wszystkich moich wtyczek. Wszystko, co muszę wtedy zrobić, to wyszukać / zamienić prefiksy funkcji / klasy i ruszyć. Kiedy wciąż prefiksowałem moje pliki, to był dodatkowy krok, który musiałem zrobić (i dość denerwujący), ale teraz muszę tylko zmienić nazwę folderu wtyczek i głównego pliku wtyczek.
źródło
Zobacz także ten świetny szablon widgetu WP . Daje świetne wskazówki dotyczące struktur (nawet jeśli nie ma klasy ani folderu dla oddzielnych modeli).
źródło
Mniej powszechnym podejściem do struktury plików i katalogów wtyczki jest podejście typu pliku. Warto tutaj wspomnieć o kompletności:
Każdy katalog zawiera tylko pliki tego typu. Warto zauważyć, że takie podejście jest niewystarczające, gdy masz wiele typów plików,
.png .gif .jpg
które mogą być logicznie przechowywane w jednym katalogu,images/
na przykład.źródło