Wo werden PHP-Dateien gespeichert, die von Plugins / Themes erstellt wurden?

12

Es gibt Fälle, in denen ein Plugin oder Theme irgendwo eine PHP-Datei erstellen muss, die sie später enthalten kann. Zum Beispiel ein Captcha-Plugin oder eine Art Template-System wie twig / smarty (In meiner Situation ist es eine einfache Template-Engine für eine Sammlung von Widgets).

Wo soll diese Datei erstellt werden?

Der einzige Ort, an den ich denken kann, ist wp-content/uploads/, aber das klingt einfach nicht richtig :)

Gibt es also einen sicheren Ort, an dem Sie Dateien erstellen können, ohne sich Sorgen machen zu müssen, dass sie bei WordPress / Plugin / Theme-Update gelöscht werden?

Eine Lösung könnte darin bestehen, ein untergeordnetes Theme / Verzeichnis im Verzeichnis Themes / Plugins zu erstellen ...

Onetrickpony
quelle

Antworten:

5

Sie können sich nicht auf den Schreibzugriff im Plugin oder Theme-Verzeichnis verlassen, daher ist wp_upload_dir () das einzig mögliche Verzeichnis.
Aber ich bezweifle wirklich , dass es notwendig ist , die Informationen in einer neuen Datei zu speichern. Wenn die Vorlage vom Benutzer erstellt wurde, speichern Sie sie in einer Option und analysieren Sie den Inhalt mit Ihren regulären Plugin-Funktionen (z. B. durch Ersetzen von Platzhaltern durch strtr()).

Fuxia
quelle
Ja, das ist gut, um Variablen zu ersetzen (ich habe jetzt so etwas). Aber wenn Sie dem Benutzer auch erlauben möchten, bedingte Tags wie IF zu verwenden oder ein Objekt zu schleifen, müssen Sie PHP-Code schreiben ...
onetrickpony
5

Bei der Arbeit an einem Wordpress-Plugin bin ich auf Ihre Frage gestoßen. Ich habe auch zuerst darüber nachgedacht, temporäre Dateien zu erstellen, um einige Daten zwischenzuspeichern, die mein Plugin erstellt hat. Wenn ich es mir etwas genauer überlege, erscheint mir dieser Ansatz seltsam, da Sie nicht möchten, dass temporäre Daten auf einem Server herumliegen, wenn Sie versuchen, sie mithilfe eines Serverclusters zu skalieren.

Also habe ich erneut gesucht und es scheint eine gültige Lösung für solche Probleme zu sein: die Wordpress Transients API , mit der Sie Daten mit einem Ablaufdatum in der Datenbank speichern können. Natürlich könnte Ihr Problem immer noch lokal zwischengespeicherte Dateien erfordern, z. B. wenn sie zu groß für die Datenbank sind, aber zumindest empfehle ich, auch diese Option zu prüfen :-)

Sebi
quelle
3

Ich kann mir nur ein paar gute Gründe vorstellen, warum ein Plugin eine Datei erstellen müsste. Eine besteht darin, komplizierte Optionen zu sichern, die der Benutzer exportieren und herunterladen kann, um auf eine neue Site zu wechseln. Das andere ist ein Sitemap-Plugin.

Wenn Ihr Plugin Vorlagendateien enthält, die der Benutzer anpassen kann, sollten Sie dem Benutzer die Option geben, die angepasste Datei in das aktuelle Themenverzeichnis zu verschieben, damit sie beim Aktualisieren Ihres Plugins nicht überschrieben werden. Sie können versuchen, die Dateien zuerst aus dem Themenverzeichnis zu laden und dann auf Ihr Plugin-Verzeichnis zurückzugreifen.

Gravity Forms speichert hochgeladene Formulardateien in einem eigenen Ordner innerhalb der Uploads. W3 Total Cache verwendet WP-Inhalt, Login Redirect verwendet die oben beschriebene Methode.

Chris_O
quelle
1

Wenn Sie Dateien erstellen müssen (z. B. temporäre Dateien für ein CAPTCHA-Plugin), sollten Sie auf jeden Fall \wp-content\uploads\(oder ein benutzerdefiniertes Verzeichnis wie \wp-content\plugin-slug-files\) verwenden.

Die meisten anderen benutzerdefinierten Codes sollten wirklich in der Datenbank gespeichert werden.

Chip Bennett
quelle
1
und eval()es? auf keinen Fall ...
onetrickpony
Was brauchst du eval()?
Chip Bennett
Denken Sie zum Beispiel an Smarty. Angenommen, Sie erstellen ein Widget und möchten, dass der Benutzer die Ausgabe beliebig anpassen kann. Sie fügen also den Widget-Optionen einen Textbereich hinzu, in dem der Benutzer seine eigene Smarty-ähnliche Vorlage für dieses Widget schreiben kann. Diese Vorlage muss kompiliert werden. Der beste Weg, dies zu tun, besteht darin, eine PHP-Datei zu generieren und sie in das Widget aufzunehmen.
Onetrickpony
Das klingt nach einer beträchtlichen Strecke der beabsichtigten Verwendung von Widgets / Widget-Optionen ...
Chip Bennett
1
Sicherlich nicht. Aber IMHO, wenn der Benutzer so viel Flexibilität beim Erstellen von benutzerdefinierten Widgets benötigt, sollte der Benutzer ein benutzerdefiniertes Plugin schreiben oder der Datei functions.php seines Themes benutzerdefinierten Widget-Code hinzufügen. Warum ein Plugin, das Widgets erstellt, mit dem Benutzer andere Widgets erstellen können?
Chip Bennett
1

Ich empfehle immer einen PSR-0-kompatiblen Autoloader und einen Bibliotheksordner, der einfach funktioniert.

Einige WP-Benutzer schießen Sie dann möglicherweise, aber möglicherweise konzentrieren Sie sich nicht auf diese Benutzer, sodass dies eine Option sein kann. Vor allem, wenn Sie immer mehr herstellerspezifische Bibliotheken erhalten.

hakre
quelle