Onde armazenar arquivos PHP criados por plugins / temas

12

Há casos em que um plugin ou tema precisa criar um arquivo php em algum lugar que possa incluí-lo posteriormente. Por exemplo, um plug-in captcha, ou algum tipo de sistema de templates como twig / smarty (na minha situação, é um simples mecanismo de modelo para uma coleção de widgets).

Onde esse arquivo deve ser criado?

O único lugar em que consigo pensar é wp-content/uploads/, mas isso não parece certo :)

Então, existe um lugar seguro onde você pode criar arquivos e não se preocupar com a exclusão deles no WordPress / plugin / atualização de tema?

Uma solução poderia ser criar um diretório / tema filho no diretório themes / plugins ...

onetrickpony
fonte

Respostas:

5

Você não pode confiar no acesso de gravação no diretório de plug-ins ou temas, portanto, wp_upload_dir () é o único diretório possível.
Mas realmente duvido que seja necessário armazenar as informações em um novo arquivo. Se o modelo for criado pelo usuário, armazene-o em uma opção e analise o conteúdo com suas funções regulares de plug-in (por exemplo, substituindo espaços reservados por strtr()).

fuxia
fonte
Sim, isso é bom para substituir variáveis ​​(eu tenho algo parecido agora). Mas se você também quiser permitir que o usuário use tags condicionais como IF ou loop de um objeto, você precisa escrever código PHP ...
onetrickpony
5

Enquanto trabalhava em um plugin do Wordpress, me deparei com sua pergunta. Também pensei em criar arquivos temporários para armazenar em cache alguns dados que meu plug-in estava criando. No entanto, pensando um pouco mais, essa abordagem me parece estranha, pois você não deseja ter dados temporários em um servidor se estiver tentando escalá-los usando um cluster de servidores.

Por isso, procurei novamente e parece que a solução válida para esses problemas é a API do Wordpress Transients, que permite armazenar dados no banco de dados com uma data de validade. É claro que o seu problema ainda pode exigir arquivos armazenados em cache localmente, por exemplo, se eles forem muito grandes para o banco de dados, mas pelo menos eu sugiro que dê uma olhada nessa opção também :-)

Sebi
fonte
3

Só consigo pensar em algumas boas razões para um plugin precisar criar um arquivo. Uma é fazer backup de opções complicadas que o usuário pode exportar e baixar para mudar para um novo site. O outro é um plugin de sitemap.

Se o seu plug-in tiver arquivos de modelo que o usuário possa personalizar, você deverá dar ao usuário a opção de mover o arquivo personalizado para o diretório de temas atual, para que, quando o plug-in for atualizado, eles não sejam substituídos. Você pode tentar carregar os arquivos do diretório de temas primeiro e depois voltar ao diretório de plugins.

O Gravity Forms armazena os arquivos enviados por formulário em sua própria pasta, dentro dos envios. O W3 Total Cache usa o conteúdo wp, o redirecionamento de login usa o método descrito acima.

Chris_O
fonte
1

Se você deve criar arquivos (como arquivos temporários para um plug-in CAPTCHA), use definitivamente \wp-content\uploads\(ou um diretório personalizado como \wp-content\plugin-slug-files\).

A maioria dos outros códigos personalizados realmente deve ser armazenada no banco de dados.

Chip Bennett
fonte
1
e eval()isso? de jeito nenhum ...
onetrickpony
Do que você precisa eval()?
Chip Bennett
pense em esperteza, por exemplo. Digamos que você crie um widget e deseja que o usuário possa personalizar a saída da maneira que desejar. Então, você adiciona uma área de texto nas opções do widget, onde o usuário pode escrever seu próprio modelo semelhante a smarty para esse widget. Esse modelo precisa ser compilado, e a melhor maneira de fazer isso é gerar um arquivo PHP e incluí-lo dentro do widget.
Onetrickpony
Isso soa como uma extensão considerável da utilização prevista para Widgets / opções widget ...
Chip Bennett
1
Certamente não. Mas IMHO, se o usuário precisar de tanta flexibilidade na criação de widgets personalizados, ele deverá escrever um plug-in personalizado ou adicionar um código widget personalizado ao arquivo functions.php do tema. Por que ter um plug-in, que cria widgets, que permite aos usuários criar outros widgets?
Chip Bennett
1

Eu sempre sugiro um carregador automático compatível com PSR-0 e uma pasta da biblioteca que simplesmente funcione.

Alguns usuários do WP podem atirar em você, mas talvez você não esteja focado nesses usuários, então isso pode ser uma opção. Especialmente se você receber mais e mais bibliotecas específicas do fornecedor.

hakre
fonte