Où stocker les fichiers PHP créés par plugin / thèmes


12

Il existe des cas dans lesquels un plugin ou un thème doit créer un fichier php quelque part qui pourra l'inclure ultérieurement. Par exemple, un plugin captcha, ou une sorte de système de modèle comme twig / smarty (dans ma situation, c'est un moteur de modèle simple pour une collection de widgets).

Où devrait être créé ce fichier?

Le seul endroit wp-content/uploads/auquel je peux penser est , mais cela ne sonne pas juste :)

Y a-t-il donc un endroit sûr où vous pouvez créer des fichiers, et ne vous inquiétez pas qu'ils soient supprimés lors de la mise à jour de WordPress / plugin / thème?

Une solution pourrait être de créer un thème / répertoire enfant dans le répertoire themes / plugins ...

Réponses:



5

Vous ne pouvez pas compter sur l'accès en écriture dans le répertoire du plugin ou du thème, donc wp_upload_dir () est le seul répertoire possible.
Mais je doute vraiment qu'il soit nécessaire de stocker les informations dans un nouveau fichier. Si le modèle est créé par l'utilisateur, stockez-le dans une option et analysez le contenu avec vos fonctions de plugin habituelles (par exemple en remplaçant les espaces réservés par strtr()).


oui, c'est bon pour remplacer des variables (j'ai quelque chose comme ça maintenant). Mais si vous souhaitez également permettre à l'utilisateur d'utiliser des balises conditionnelles comme IF ou de boucler un objet, vous devez écrire du code php ...
onetrickpony

5

En travaillant sur un plugin Wordpress, je suis tombé sur votre question. J'ai également pensé à créer des fichiers temporaires pour mettre en cache certaines données que mon plugin créait. Cependant, en y réfléchissant un peu plus, cette approche me semble étrange car vous ne voulez pas que des données temporaires traînent sur un serveur si vous essayez de les faire évoluer à l'aide d'un cluster de serveurs.

J'ai donc cherché à nouveau et il semble que la solution valable pour ces problèmes soit l' API Wordpress Transients vous permettant de stocker des données dans la base de données avec une date d'expiration. Bien sûr, votre problème pourrait toujours nécessiter des fichiers mis en cache localement, par exemple s'ils sont trop volumineux pour la base de données, mais au moins je suggère de jeter un œil à cette option également :-)


3

Je ne peux penser qu'à quelques bonnes raisons pour lesquelles un plugin aurait besoin de créer un fichier. L'une consiste à sauvegarder des options compliquées que l'utilisateur peut exporter et télécharger pour se déplacer vers un nouveau site. L'autre est un plugin de plan de site.

Si votre plugin contient des fichiers de modèle que l'utilisateur peut personnaliser, vous devez donner à l'utilisateur la possibilité de déplacer le fichier personnalisé vers le répertoire de thème actuel afin que lorsque votre plugin soit mis à jour, il ne sera pas remplacé. Vous pouvez essayer de charger les fichiers à partir du répertoire de thème d'abord, puis revenir à votre répertoire de plugin.

Gravity Forms stocke les fichiers téléchargés des formulaires dans son propre dossier à l'intérieur des téléchargements. W3 Total Cache utilise wp-content, la redirection de connexion utilise la méthode décrite ci-dessus.


1

Si vous devez créer des fichiers (tels que des fichiers temporaires pour un plugin CAPTCHA), vous devez absolument utiliser \wp-content\uploads\(ou un répertoire personnalisé tel que \wp-content\plugin-slug-files\).

La plupart des autres codes personnalisés doivent vraiment être stockés dans la base de données.


1
et eval()ça? aucun moyen ...
onetrickpony

De quoi avez-vous besoin eval()?
Chip Bennett

pensez à smarty par exemple. Disons que vous créez un widget et que vous souhaitez que l'utilisateur ait la possibilité de personnaliser la sortie comme il le souhaite. Vous ajoutez donc une zone de texte dans les options du widget où l'utilisateur peut écrire son propre modèle smarty-like pour ce widget. Ce modèle doit être compilé, et la meilleure façon de le faire est de générer un fichier PHP et de l'inclure dans le widget.
onetrickpony

Cela ressemble à un tronçon considérable de l'utilisation prévue des widgets / options de widgets ...
Chip Bennett

1
Certainement pas. Mais à mon humble avis, si l'utilisateur a besoin de beaucoup de flexibilité pour créer des widgets personnalisés, l'utilisateur doit écrire un plugin personnalisé ou ajouter du code de widget personnalisé au fichier functions.php de son thème. Pourquoi avoir un plugin, qui crée des widgets, qui permet aux utilisateurs de créer d'autres widgets?
Chip Bennett

1

Je suggère toujours un chargeur automatique compatible PSR-0 et un dossier de bibliothèque qui fonctionne.

Certains utilisateurs de WP pourraient vous tirer dessus, mais peut-être que vous n'êtes pas concentré sur ces utilisateurs, cela peut donc être une option. Surtout si vous obtenez de plus en plus de bibliothèques spécifiques aux fournisseurs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.