Где хранить файлы PHP, созданные плагином / темами

12

Есть случаи, когда плагин или тема должны создать файл php где-нибудь, чтобы позже включить его. Например, плагин капчи или какая-то система шаблонов, такая как twig / smarty (в моей ситуации это простой движок шаблонов для коллекции виджетов).

Где должен быть создан этот файл?

Единственное место, о котором я могу думать, это wp-content/uploads/, но это просто не звучит правильно :)

Так есть ли безопасное место, где вы можете создавать файлы и не беспокоиться об их удалении при обновлении WordPress / plugin / theme?

Одним из решений может быть создание дочерней темы / каталога в каталоге themes / plugins ...

onetrickpony
источник

Ответы:

5

Вы не можете полагаться на доступ для записи в каталоге плагинов или тем, поэтому wp_upload_dir () является единственным возможным каталогом.
Но я действительно сомневаюсь, что есть необходимость хранить информацию в новом файле. Если шаблон создан пользователем, сохраните его в опции, чтобы проанализировать содержимое с помощью обычных функций плагина (например, заменив заполнители на strtr()).

Фуксия
источник
да, это хорошо для замены переменных (у меня сейчас что-то подобное). Но если вы также хотите разрешить пользователю использовать условные теги, такие как IF или цикл объекта, вам нужно написать php-код ...
onetrickpony
5

Работая над плагином Wordpress, я наткнулся на ваш вопрос. Сначала я подумал о создании временных файлов для кэширования некоторых данных, которые создавал мой плагин. Однако, если подумать немного об этом, этот подход кажется мне странным, поскольку вы не хотите, чтобы временные данные лежали на одном сервере, если вы пытаетесь масштабировать их с помощью кластера серверов.

Поэтому я снова искал и, похоже, верным решением для таких проблем является API Wordpress Transients, позволяющий хранить данные в базе данных с датой истечения срока действия. Конечно, ваша проблема может потребовать локально кэшированных файлов, например, если они слишком велики для базы данных, но, по крайней мере, я предлагаю взглянуть и на эту опцию :-)

Sebi
источник
3

Я могу думать только о нескольких веских причинах, по которым плагину понадобится создать файл. Одним из них является резервное копирование сложных параметров, которые пользователь может экспортировать и загрузить для перехода на новый сайт. Другой - плагин карты сайта.

Если в вашем плагине есть файлы шаблонов, которые пользователь может настроить, вы должны дать ему возможность переместить настроенный файл в текущий каталог тем, чтобы при обновлении вашего плагина они не перезаписывались. Вы можете сначала попытаться загрузить файлы из каталога тем, а затем вернуться в каталог плагинов.

Gravity Forms хранит загруженные файлы в своей папке внутри загрузок. W3 Total Cache использует wp-контент, перенаправление входа в систему использует метод, который я описал выше.

Chris_O
источник
1

Если вам необходимо создать файлы (например, временные файлы для плагина CAPTCHA), вы обязательно должны использовать \wp-content\uploads\(или пользовательский каталог, такой как \wp-content\plugin-slug-files\).

Большинство других пользовательских кодов действительно должны храниться в базе данных.

Чип Беннетт
источник
1
а eval()это? ни в коем случае ...
onetrickpony
Что тебе нужно eval()?
Чип Беннетт
подумайте о умнице, например. Допустим, вы создали виджет и хотите, чтобы у пользователя была возможность настраивать вывод так, как он хочет. Таким образом, вы добавляете текстовую область в опции виджета, где пользователь может написать свой собственный шаблон, похожий на smarty для этого виджета. Этот шаблон нужно скомпилировать, и лучший способ сделать это - сгенерировать файл PHP и включить его в виджет.
onetrickpony
Это звучит как значительная часть предполагаемого использования параметров виджетов / виджетов ...
Чип Беннетт
1
Конечно, нет. Но ИМХО, если пользователю нужна такая большая гибкость при создании пользовательских виджетов, пользователь должен написать собственный плагин или добавить собственный код виджета в файл functions.php своей темы. Зачем нужен плагин, который создает виджеты, которые позволяют пользователям создавать другие виджеты?
Чип Беннетт
1

Я всегда предлагаю PSR-0-совместимый автозагрузчик и папку библиотеки, которая просто работает.

Некоторые пользователи WP могут застрелить вас тогда, но, возможно, вы не сфокусированы на этих пользователях, так что это может быть вариантом. Особенно, если вы получаете все больше и больше специфических для продавца библиотек.

hakre
источник