Dies ist keine Frage zum Erstellen eines WordPress-Plugins. Vielmehr könnten, wenn überhaupt, Anleitungen angewendet werden, wie die Dateiarchitektur eines Plugins zusammengestellt werden kann.
Einige andere Programmiersprachen oder Bibliotheken verfügen über sehr kontrollierte Methoden zum Organisieren von Verzeichnissen und Dateien. Manchmal ist das ärgerlich und unterstreicht die Freiheit, die PHP bietet, aber auf der anderen Seite werden WordPress-Plugins auf jede vom Autor festgelegte Weise zusammengestellt.
Es gibt keine richtige Antwort , aber ich hoffe zu verfeinern, wie ich und andere Plugins erstellen, um sie für andere Entwickler benutzerfreundlicher zu gestalten, leichter zu debuggen, einfacher zu navigieren und möglicherweise effizienter zu gestalten.
Die letzte Frage: Was ist Ihrer Meinung nach der beste Weg, ein Plugin zu organisieren?
Im Folgenden sind einige Beispielstrukturen aufgeführt, die jedoch in keiner Weise erschöpfend sind. Fühlen Sie sich frei, Ihre eigenen Empfehlungen hinzuzufügen.
Angenommene Standardstruktur
/wp-content
/plugins
/my-plugin
my-plugin.php
Model View Controller (MVC) -Methode
/wp-content
/plugins
/my-plugin
/controller
Controller.php
/model
Model.php
/view
view.php
my-plugin.php
Die drei Teile von MVC:
- Das Modell interagiert mit der Datenbank, fragt ab und speichert Daten und enthält Logik.
- Der Controller würde Vorlagen-Tags und -Funktionen enthalten, die die Ansicht verwenden würde.
- Die Ansicht ist dafür verantwortlich, die vom Modell bereitgestellten Daten anzuzeigen, wie sie vom Controller erstellt wurden.
Nach Typmethode organisiert
/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
Erhältlich bei Github
Basiert auf der Plugin-API , den Codierungsstandards und den Dokumentationsstandards .
/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
Locker organisierte Methode
/wp-content
/plugins
/my-plugin
css/
images/
js/
my-admin.php
my-class.php
my-template.php
my-widget.php
my-plugin.php
quelle
css/
,images/
undjs/
wärestyles/
,images/
undscripts/
.Antworten:
Beachten Sie, dass Plugins nach WP-Standards allesamt "Controller" sind.
Es hängt davon ab, was das Plugin tun soll, aber in jedem Fall würde ich versuchen, die Bildschirmausgabe so weit wie möglich vom PHP-Code zu trennen.
Dies ist eine einfache Möglichkeit: Definieren Sie zunächst eine Funktion, mit der die Vorlage geladen wird:
Wenn das Plugin nun ein Widget zur Anzeige von Daten verwendet:
Die Vorlage:
Dateien:
Wo setzen Sie Ihre CSS, JS, Bilder, oder wie Sie den Container für die Haken entwerfen, ist weniger wichtig. Ich denke, es ist eine Frage der persönlichen Präferenz.
quelle
Das hängt vom Plugin ab. Dies ist meine Grundstruktur für fast jedes Plugin:
Dies wäre etwas, das in den
lib
Ordner gehen würde .Wenn es sich um ein besonders komplexes Plugin mit vielen Funktionen im Administrationsbereich handelt, würde ich einen
admin
Ordner hinzufügen , der alle diese PHP-Dateien enthält. Wenn das Plugin die enthaltenen Themendateien ersetzt , gibt es möglicherweise auch einentemplate
odertheme
Ordner.Eine Verzeichnisstruktur könnte also so aussehen:
quelle
IMHO, die einfachste, leistungsfähigste und am besten zu wartende Methode ist die Verwendung einer MVC-Struktur, und WP MVC wurde entwickelt, um das Schreiben von MVC-Plugins sehr einfach zu machen (ich bin allerdings etwas voreingenommen ...). Mit WP MVC erstellen Sie einfach die Modelle, Ansichten und Controller, und alles andere wird hinter den Kulissen für Sie erledigt.
Separate Controller und Ansichten können für die Bereiche "public" und "admin" erstellt werden, und das gesamte Framework nutzt viele der nativen Funktionen von WordPress. Die Dateistruktur und ein Großteil der Funktionen ist genau so wie in den gängigsten MVC-Frameworks (Rails, CakePHP usw.).
Weitere Informationen und ein Tutorial finden Sie hier:
quelle
Wir verwenden eine Mischung aller Methoden. Als erstes verwenden wir das Zend Framework 1.11 in unseren Plugins und mussten daher wegen der Autoload-Mechanik eine ähnliche Struktur für die Klassendateien verwenden.
Die Struktur unseres Core-Plugins (das von allen unseren Plugins als Basis verwendet wird) sieht ungefähr so aus:
webeo-core.php
Datei im Plugin-Stammverzeichnis auf.Webeo_CoreLoader
dieser Datei befindet sich auch eine Klasse, die einige Plugin-Konstanten festlegt, den Klassen-Autoloader initialisiert und die Setup-Methode derCore.php
Klasse imlib/Webeo
Ordner aufruft. Dieser läuft amplugins_loaded
Aktionshaken mit der Priorität von9
.Core.php
Klasse ist unsere Plugin-Bootstrap-Datei. Der Name basiert auf dem Namen des Plugins.Wie Sie sehen, befindet sich in dem
lib
Ordner ein Unterverzeichnis für alle Herstellerpakete (Webeo
,Zend
). Alle Unterpakete innerhalb eines Anbieters werden vom Modul selbst strukturiert. Für ein neuesMail Settings
Administrationsformular hätten wir folgende Struktur:Unsere Sub-Plugins haben mit einer Ausnahme die gleiche Struktur. Wir gehen eine Ebene tiefer in den Herstellerordner, da Namenskonflikte während des Autoload-Ereignisses behoben werden. Wir bezeichnen die Plugins auch als Boostrap-Klasse
E.g. Faq.php
mit Priorität10
innerhalb des Hooksplugins_loaded
.Ich werde den
lib
Ordner wahrscheinlich umbenennenvendors
und alle öffentlichen Ordner (CSS, Bilder, JS, Sprachen) in einen Ordner verschieben, derpublic
in der nächsten Version benannt wird.quelle
Wie viele hier schon geantwortet haben Es kommt wirklich darauf an, was das Plugin machen soll, aber hier ist meine Grundstruktur:
quelle
Ich bin teilweise an dem folgenden Plugin-Layout interessiert, es ändert sich jedoch normalerweise abhängig von den Plugin-Anforderungen.
Ich habe noch kein WordPress-Plugin erstellt, das eine MVC-Architektur erfordert, aber wenn ich dies tun würde, würde ich es mit einem separaten MVC-Verzeichnis auslegen, das selbst Ansichten / Controller / Modelle enthält.
quelle
Meine Logik, je größer das Plugin, desto mehr Struktur verwende ich.
Für große Plugins benutze ich meistens MVC.
Ich benutze dies als Ausgangspunkt und überspringe, was nicht benötigt wird.
quelle
Alle meine Plugins folgen dieser Struktur, die den meisten anderen Entwicklern sehr ähnlich zu sein scheint:
plugin-folder.php ist dann normalerweise eine Klasse, die alle benötigten Dateien aus dem core / Ordner lädt. Am häufigsten am init- oder plugins_loaded-Hook.
Früher habe ich auch alle meine Dateien mit einem Präfix versehen, aber wie @kaiser oben angemerkt hat, ist es wirklich überflüssig und ich habe vor kurzem beschlossen, es von zukünftigen Plugins zu entfernen.
Die Bibliothek / der Ordner enthält alle externen Hilfsbibliotheken, von denen das Plugin abhängig sein kann.
Je nach Plugin befindet sich möglicherweise auch eine uninstall.php-Datei im Plugin-Stammverzeichnis. Meistens wird dies jedoch über register_uninstall_hook () erledigt.
Offensichtlich erfordern einige Plugins möglicherweise keine Admin-Dateien, Vorlagen usw., aber die obige Struktur funktioniert für mich. Am Ende musst du nur eine Struktur finden, die für dich funktioniert und dabei bleiben.
Ich habe auch ein Starter-Plugin, basierend auf der obigen Struktur, die ich als Ausgangspunkt für alle meine Plugins verwende. Alles, was ich dann tun muss, ist ein Suchen / Ersetzen nach Funktions- / Klassenpräfixen und los geht's. Als ich noch meine Dateien vorangestellt habe, war das ein zusätzlicher Schritt, den ich machen musste (und der ziemlich nervig ist), aber jetzt muss ich nur noch den Plugin-Ordner und die Haupt-Plugin-Datei umbenennen.
quelle
Sehen Sie sich auch dieses großartige WP-Widget an . Es gibt großartige Hinweise zu Strukturen (auch wenn es keine Klasse oder keinen Ordner für separate Modelle gibt).
quelle
Ein weniger verbreiteter Ansatz zur Strukturierung der Dateien und Verzeichnisse eines Plugins ist der Dateityp. Der Vollständigkeit halber sei hier erwähnt:
Jedes Verzeichnis enthält nur Dateien dieses Typs. Es ist erwähnenswert, dass dieser Ansatz unzureichend ist, wenn Sie viele Dateitypen haben
.png .gif .jpg
, die möglicherweise logischer in einem einzelnen Verzeichnis abgelegt sindimages/
.quelle