Gdzie przechowywać pliki PHP utworzone przez plugin / themes

12

Są przypadki, w których wtyczka lub motyw musi utworzyć plik php w innym miejscu, które może go później dołączyć. Na przykład wtyczka captcha lub jakiś system szablonów, taki jak twig / smarty (W mojej sytuacji jest to prosty silnik szablonów dla kolekcji widżetów).

Gdzie należy utworzyć ten plik?

Jedyne miejsce, o którym myślę, to takie wp-content/uploads/, ale to nie brzmi dobrze :)

Czy jest więc bezpieczne miejsce, w którym można tworzyć pliki i nie martwić się, że zostaną usunięte podczas aktualizacji WordPress / wtyczki / motywu?

Jednym z rozwiązań może być utworzenie podrzędnego katalogu theme / w katalogu themes / plugins ...

onetrickpony
źródło

Odpowiedzi:

5

Nie można polegać na prawach zapisu w katalogu wtyczek lub motywów, więc wp_upload_dir () jest jedynym możliwym katalogiem.
Ale naprawdę wątpię, aby istniała potrzeba przechowywania informacji w nowym pliku. Jeśli szablon jest tworzony przez użytkownika, zapisz go w opcji i przeanalizuj zawartość za pomocą zwykłych funkcji wtyczki (na przykład zastępując symbole zastępcze strtr()).

fuxia
źródło
tak, to jest dobre do zastępowania zmiennych (mam teraz coś takiego). Ale jeśli chcesz, aby umożliwić użytkownikowi jak używać znaczników warunkowych IF lub pętli obiektu, trzeba pisać kodu php ...
onetrickpony
5

Podczas pracy nad wtyczką Wordpress natknąłem się na twoje pytanie. Najpierw pomyślałem o utworzeniu plików tymczasowych w celu buforowania niektórych danych tworzonych przez moją wtyczkę. Jednak myśląc nieco dłużej, takie podejście wydaje mi się dziwne, ponieważ nie chcesz mieć tymczasowych danych leżących na jednym serwerze, jeśli próbujesz skalować je za pomocą klastra serwerów.

Więc przeszukałem ponownie i wydaje się, że poprawnym rozwiązaniem takich problemów jest Wordpress Transients API pozwalający na przechowywanie danych w bazie danych z datą ważności. Oczywiście Twój problem może nadal wymagać plików buforowanych lokalnie, np. Jeśli są one zbyt duże dla bazy danych, ale przynajmniej sugeruję, aby również spojrzeć na tę opcję :-)

Sebi
źródło
3

Mogę tylko wymyślić kilka dobrych powodów, dla których wtyczka musiałaby utworzyć plik. Jednym z nich jest wykonanie kopii zapasowej skomplikowanych opcji, które użytkownik może wyeksportować i pobrać, aby przejść do nowej witryny. Drugi to wtyczka mapy witryny.

Jeśli Twoja wtyczka zawiera pliki szablonów, które użytkownik może dostosować, powinnaś dać użytkownikowi możliwość przeniesienia dostosowanego pliku do bieżącego katalogu motywów, aby po aktualizacji wtyczki nie został zastąpiony. Możesz najpierw spróbować załadować pliki z katalogu motywów, a następnie wrócić do katalogu wtyczek.

Gravity Forms przechowuje przesłane pliki w swoim własnym folderze wewnątrz przesyłanych plików. W3 Total Cache korzysta z treści wp, przekierowanie logowania używa metody opisanej powyżej.

Chris_O
źródło
1

Jeśli musisz utworzyć pliki (takie jak pliki tymczasowe dla wtyczki CAPTCHA), zdecydowanie powinieneś użyć \wp-content\uploads\(lub niestandardowego katalogu, takiego jak \wp-content\plugin-slug-files\).

Większość innych niestandardowych kodów naprawdę powinno być przechowywanych w bazie danych.

Chip Bennett
źródło
1
i eval()to? nie ma mowy ...
onetrickpony
Co trzeba eval()?
Chip Bennett,
pomyśl na przykład o smarty. Załóżmy, że tworzysz widget i chcesz, aby użytkownik miał możliwość dostosowywania wyników w dowolny sposób. Więc dodajesz obszar tekstowy w opcjach widżetu, w którym użytkownik może napisać własny szablon podobny do smarty dla tego widżetu. Ten szablon musi zostać skompilowany, a najlepszym sposobem na to jest wygenerowanie pliku PHP i włączenie go do widżetu.
onetrickpony,
To brzmi jak znacznym odcinku zamierzonego zastosowania Widgets / opcje Widget ...
Chip Bennett
1
Zdecydowanie nie. Ale IMHO, jeśli użytkownik potrzebuje takiej elastyczności w tworzeniu niestandardowych widżetów, powinien napisać niestandardową wtyczkę lub dodać niestandardowy kod widżetu do pliku functions.php swojego motywu. Dlaczego wtyczka, która tworzy widżety, umożliwia użytkownikom tworzenie innych widżetów?
Chip Bennett,
1

Zawsze sugeruję autoloader zgodny z PSR-0 i folder biblioteki, który po prostu działa.

Niektórzy użytkownicy WP mogą cię wtedy zastrzelić, ale być może nie koncentrujesz się na tych użytkownikach, więc może to być opcja. Zwłaszcza jeśli dostajesz coraz więcej bibliotek specyficznych dla dostawców.

hakre
źródło