Dónde almacenar archivos PHP creados por plugins / themes

12

Hay casos en los que un complemento o tema necesita crear un archivo php en algún lugar que luego pueda incluirlo. Por ejemplo, un complemento de captcha, o algún tipo de sistema de plantillas como twig / smarty (en mi situación, es un motor de plantillas simple para una colección de widgets).

¿Dónde se debe crear este archivo?

El único lugar en el que puedo pensar es wp-content/uploads/, pero eso no suena bien :)

Entonces, ¿hay un lugar seguro donde pueda crear archivos y no preocuparse de que se eliminen en WordPress / plugin / theme update?

Una solución podría ser crear un tema / directorio secundario en el directorio themes / plugins ...

Pony de un solo truco
fuente

Respuestas:

5

No puede confiar en el acceso de escritura en el directorio de plugins o temas, por lo que wp_upload_dir () es el único directorio posible.
Pero realmente dudo que sea necesario almacenar la información en un nuevo archivo. Si el usuario crea la plantilla, almacénela en una opción y analice el contenido con sus funciones de complemento habituales (por ejemplo, reemplazando los marcadores de posición con strtr()).

fuxia
fuente
sí, eso es bueno para reemplazar variables (ahora tengo algo así). Pero si también desea permitir que el usuario use etiquetas condicionales como IF o bucle un objeto, debe escribir el código php ...
onetrickpony
5

Mientras trabajaba en un complemento de Wordpress, me topé con su pregunta. También pensé primero en crear archivos temporales para almacenar en caché algunos datos que estaba creando mi complemento. Sin embargo, pensando un poco más, este enfoque me parece extraño ya que no desea tener datos temporales en un servidor si está tratando de escalarlos utilizando un grupo de servidores.

Así que busqué nuevamente y parece que una solución válida para tales problemas es la API de Wordpress Transients que le permite almacenar datos en la base de datos con una fecha de vencimiento. Por supuesto, su problema aún podría requerir archivos almacenados en caché localmente, por ejemplo, si son demasiado grandes para la base de datos, pero al menos le sugiero que también eche un vistazo a esta opción :-)

Sebi
fuente
3

Solo puedo pensar en algunas buenas razones por las que un complemento necesitaría crear un archivo. Una es hacer una copia de seguridad de opciones complicadas que el usuario puede exportar y descargar para moverse a un nuevo sitio. El otro es un complemento de mapa del sitio.

Si su complemento tiene archivos de plantilla que el usuario puede personalizar, debe darle al usuario la opción de mover el archivo personalizado al directorio del tema actual para que cuando el complemento se actualice no se sobrescriban. Puede intentar cargar los archivos desde el directorio de temas primero y luego volver a su directorio de complementos.

Gravity Forms almacena los archivos cargados en su propia carpeta dentro de las cargas. W3 Total Cache usa wp-content, la redirección de inicio de sesión usa el método que describí anteriormente.

Chris_O
fuente
1

Si debe crear archivos (como archivos temporales para un complemento CAPTCHA), definitivamente debe usar \wp-content\uploads\(o un directorio personalizado como \wp-content\plugin-slug-files\).

La mayoría de los otros códigos personalizados realmente deberían almacenarse en la base de datos.

Chip Bennett
fuente
1
y eval()eso? de ninguna manera ...
onetrickpony
¿Qué se necesita para eval()?
Chip Bennett el
piensa en smarty por ejemplo. Supongamos que crea un widget y desea que el usuario tenga la capacidad de personalizar la salida de la forma que desee. Por lo tanto, agrega un área de texto en las opciones del widget donde el usuario puede escribir su propia plantilla tipo smarty para ese widget. Esa plantilla necesita ser compilada, y la mejor manera de hacerlo es generar un archivo PHP e incluirlo dentro del widget.
onetrickpony
Eso suena como una extensión considerable del uso previsto de Widgets / Opciones de widget ...
Chip Bennett
1
Ciertamente no. Pero en mi humilde opinión, si el usuario necesita tanta flexibilidad en la creación de widgets personalizados, entonces el usuario debe escribir un complemento personalizado o agregar un código de widget personalizado al archivo functions.php de su tema. ¿Por qué tener un complemento, que crea widgets, que permite a los usuarios crear otros widgets?
Chip Bennett el
1

Siempre sugiero un autocargador compatible con PSR-0 y una carpeta de biblioteca que simplemente funcione.

Algunos usuarios de WP pueden dispararte en ese momento, pero quizás no estés enfocado en estos usuarios, por lo que esta puede ser una opción. Especialmente si obtienes más y más librerías específicas del proveedor.

hakre
fuente