Esta no es una pregunta sobre cómo construir un complemento de WordPress. Por el contrario, qué guías, si las hay, podrían aplicarse a cómo armar la arquitectura de archivos de cualquier complemento.
Algunos otros lenguajes de programación o bibliotecas tienen formas muy controladas de organizar directorios y archivos. A veces esto es molesto y resalta la libertad que ofrece PHP, pero por otro lado, los complementos de WordPress se combinan de cualquier manera según lo determine su autor.
No hay una respuesta correcta , pero mi esperanza es refinar cómo yo, y otros, construimos complementos para hacerlos más amigables para otros desarrolladores, más fáciles de depurar, más fáciles de navegar y posiblemente más eficientes.
La pregunta final: ¿cuál crees que es la mejor manera de organizar un complemento?
A continuación hay algunas estructuras de muestra, pero de ninguna manera hay una lista exhaustiva. Siéntase libre de agregar sus propias recomendaciones.
Estructura predeterminada asumida
/wp-content
/plugins
/my-plugin
my-plugin.php
Método de controlador de vista de modelo (MVC)
/wp-content
/plugins
/my-plugin
/controller
Controller.php
/model
Model.php
/view
view.php
my-plugin.php
Las tres partes de MVC:
- El modelo interactúa con la base de datos, consulta y guarda datos, y contiene lógica.
- El controlador contendría etiquetas de plantilla y funciones que la vista utilizaría.
- La vista es responsable de mostrar los datos proporcionados por el modelo tal como los construyó el controlador.
Organizado por método de tipo
/wp-content
/plugins
/my-plugin
/admin
admin.php
/assets
css/
images/
/classes
my-class.php
/lang
my-es_ES.mo
/templates
my-template.php
/widgets
my-widget.php
my-plugin.php
WordPress Plugin Boilerplate
Disponible en Github
Basado en la API de complementos , estándares de codificación y estándares de documentación .
/wp-content
/plugins
/my-plugin
/admin
/css
/js
/partials
my-plugin-admin.php
/includes
my_plugin_activator.php
my_plugin_deactivator.php
my_plugin_i18n.php
my_plugin_loader.php
my_plugin.php
/languages
my_plugin.pot
/public
/css
/js
/partials
my-plugin-public.php
LICENSE.txt
README.txt
index.php
my-plugin.php
uninstall.php
Método poco organizado
/wp-content
/plugins
/my-plugin
css/
images/
js/
my-admin.php
my-class.php
my-template.php
my-widget.php
my-plugin.php
fuente
css/
,images/
yjs/
seríastyles/
,images/
yscripts/
.Respuestas:
Tenga en cuenta que los complementos son todos "controladores" según los estándares de WP.
Depende de lo que se supone que debe hacer el complemento, pero en todos los casos trataría de separar la salida de pantalla del código PHP tanto como sea posible.
Aquí hay una forma de hacerlo fácilmente: primero, defina una función que cargue la plantilla:
Ahora, si el complemento utiliza un widget para mostrar datos:
La plantilla:
Archivos:
¿Dónde colocar sus CSS, JS, imágenes o cómo diseña el contenedor para los ganchos es menos importante? Es una cuestión de preferencia personal, supongo.
fuente
Depende del complemento. Esta es mi estructura básica para casi todos los complementos:
Esto sería algo que iría en la
lib
carpeta.Si es un complemento particularmente complejo, con mucha funcionalidad de área de administración, agregaría una
admin
carpeta para contener todos esos archivos PHP. Si el complemento hace algo como reemplazar los archivos de tema incluidos , tal vez haya una carpetatemplate
otheme
también.Entonces, una estructura de directorio podría verse así:
fuente
En mi humilde opinión, la ruta más fácil, más potente y más fácil de mantener es usar una estructura MVC, y WP MVC está diseñado para hacer que la escritura de complementos MVC sea muy fácil (aunque estoy un poco sesgado ...). Con WP MVC, simplemente crea los modelos, las vistas y los controladores, y todo lo demás se maneja detrás de escena por usted.
Se pueden crear controladores y vistas separadas para las secciones públicas y administrativas, y todo el marco aprovecha muchas de las características nativas de WordPress. La estructura de archivos y gran parte de la funcionalidad es exactamente la misma que en los marcos MVC más populares (Rails, CakePHP, etc.).
Puede encontrar más información y un tutorial aquí:
fuente
Estamos usando una combinación de todos los métodos. En primer lugar, estamos usando Zend Framework 1.11 en nuestros complementos y, por lo tanto, tuvimos que usar una estructura similar para los archivos de clase debido a la mecánica de carga automática.
La estructura de nuestro complemento principal (que es utilizada por todos nuestros complementos como base) es similar a esta:
webeo-core.php
archivo en la carpeta raíz del complemento.Webeo_CoreLoader
clase dentro de este archivo, que establece algunas constantes del complemento, inicializa el autocargador de clases y realiza una llamada al método de configuración de laCore.php
clase dentro de lalib/Webeo
carpeta. Esto se ejecuta en elplugins_loaded
gancho de acción con una prioridad de9
.Core.php
clase es nuestro archivo de arranque de complemento. El nombre se basa en el nombre del complemento.Como puede ver, tenemos un subdirectorio dentro de la
lib
carpeta para todos nuestros paquetes de proveedores (Webeo
,Zend
). Todos los subpaquetes dentro de un proveedor están estructurados por el propio módulo. Para un nuevoMail Settings
formulario de administrador, tendríamos la siguiente estructura:Nuestros sub-plugins tienen la misma estructura con una excepción. Vamos a un nivel más profundo dentro de la carpeta del proveedor debido a la resolución de conflictos de nombres durante el evento de carga automática. También llamamos a los plugins clase boostrap
E.g. Faq.php
por prioridad10
dentro delplugins_loaded
gancho.Probablemente cambiaré el nombre de la
lib
carpetavendors
y moveré todas las carpetas públicas (css, images, js, languages) a una carpeta nombradapublic
en la próxima versión.fuente
Como muchos aquí ya respondieron, realmente depende de lo que se supone que debe hacer el complemento, pero aquí está mi estructura base:
fuente
Soy parcial con el siguiente diseño de complemento, sin embargo, generalmente cambia según cuáles sean los requisitos del complemento.
Todavía tengo que crear un complemento de WordPress que requiera una arquitectura de estilo MVC, pero si tuviera que hacerlo, lo diseñaría con un directorio MVC separado, que contiene vistas / controladores / modelos.
fuente
Mi lógica, cuanto más grande es el complemento, más estructura utilizo.
Para complementos grandes tiendo a usar MVC.
Lo uso como punto de partida y omito lo que no es necesario.
fuente
Todos mis complementos siguen esta estructura, que parece ser muy similar a lo que están haciendo la mayoría de los demás desarrolladores:
plugin-folder.php suele ser una clase que carga todos los archivos necesarios desde el núcleo / carpeta. Muy a menudo en el gancho init o plugins_loaded.
Solía prefijar todos mis archivos también, pero como señaló @kaiser anteriormente, es realmente redundante y recientemente he decidido eliminarlo de cualquier complemento futuro.
La biblioteca / carpeta contiene todas las bibliotecas auxiliares externas de las que puede depender el complemento.
Dependiendo del complemento, puede haber un archivo uninstall.php en la raíz del complemento también. Sin embargo, la mayoría de las veces esto se maneja a través de register_uninstall_hook ().
Obviamente, algunos complementos pueden no requerir ningún archivo o plantilla de administrador, etc., pero la estructura anterior funciona para mí. Al final solo tienes que encontrar una estructura que funcione para ti y luego quedarte con ella.
También tengo un complemento de inicio, basado en la estructura anterior que utilizo como punto de partida para todos mis complementos. Todo lo que necesito hacer es buscar / reemplazar los prefijos de función / clase y listo. Cuando todavía estaba prefijando mis archivos, era un paso adicional que tenía que hacer (y bastante molesto), pero ahora solo tengo que cambiar el nombre de la carpeta del complemento y el archivo del complemento principal.
fuente
Además, vea esta gran plantilla de widgets de WP . Da excelentes pistas sobre las estructuras (incluso si no hay una clase ni una carpeta para modelos separados).
fuente
Un enfoque menos común para estructurar los archivos y directorios de un complemento es el enfoque de tipo de archivo. Vale la pena mencionar aquí para completar:
Cada directorio contiene archivos de ese tipo solamente. Vale la pena señalar que este enfoque se queda corto cuando tiene muchos tipos de archivos
.png .gif .jpg
que podrían archivarse de manera más lógica en un solo directorio,images/
por ejemplo.fuente