Sobre la estructura de los objetos de un plugin para WordPress

Si nos basamos en el sencillo ejemplo hellodolly.php proporcionado por WordPress , o incluso la misma los documentos oficiales, nunca llega a escribir un plug-in adecuado y eficiente. Queremos aquí para analizar una posible estructura, a continuación, un esqueleto que se pueden utilizar varias veces.


Los Fundamentos

En primer lugar tenemos que entender cómo y cuándo un plugin para WordPress se carga en el sistema. Cuando es activada por un plugin, el archivo que contiene el código principal, reconocido por las líneas clásicas del comentario:

1
2
3
4
5
6
7
8
/ *
Nombre de Plugin: Mis Plugins
Plugin URI: http://wordpress.org/extend/plugins/mioplugin/
Descripción: Descripción de mis plugins
Versión: 1.0.0
Autor: Giovambattista Fazioli
URI Autor: http://labs.saidmade.com
* /

se carga o si hay en el front-end y si nos encontramos en la administración (back end):

Schema di caricamento di un Plugin WordPress

Este comportamiento es correcto en sí mismo, y probablemente en muchos casos no es tenido en cuenta por el promotor. Además, algunos plugins tienen una estructura (como la configuración, y luego no tienen necesidad de una administración) que haría inútil insistir sobre este punto.
Sin embargo, es evidente que algunos plugins tienen una aplicación uniforme, es decir, que traen consigo una gran cantidad de código que se usa sólo en el backend de WordPress. En estos casos, si usted no toma las precauciones que usted puede subir a la parte delantera, la parte visible a los navegantes, el código completamente innecesario que no hace nada, pero pesan la carga del blog.

Posibles conflictos: espacio de nombres

De lo anterior se desprende otro dato importante, todos los plugins de WordPress se cargan en la misma zona de la operación, que se traduce en la desafortunada consecuencia de que si dos plugins diferentes tienen una función (una variable o constante) tiene el mismo nombre, estos entrarán en conflicto unos con otros!

Lo ideal sería, entonces, sería capaz de:

  • Aparte de cargar el código para el front-end y back-end
  • Proteger el "espacio" para evitar posibles conflictos con otros plugins cargados en el sistema

Front-end o back-end?

La forma más sencilla de determinar si se trata de la administración (back end) es llamar a la función is_admin() :

1
2
is_admin ( ) ) // includi il codice lato back-end if (is_admin ()) / / Incluir el código de la parte de atrás
else / / Código son front-end

En la práctica, esquemática, se puede lograr:

Font-end, Back-end

o:

1
2
3
4
5
is_admin ( ) ) { if (is_admin ()) {
'admin.php' ) ; require_once ('admin.php');
{ Else {}
'client.php' ) ; require_once ('client.php');
}

Utilización de las clases para proteger el espacio de nombres

Para evitar el solapamiento de desagradable es una buena manera de "envolver" nuestras funciones y nuestras variables en contenedores adecuados: los objetos. Mediante la definición de una clase que tiene más oportunidad de proteger los nombres de nuestras funciones, podemos obtener como beneficio añadido de la reutilización de código en el plugin de futuro. Esta técnica hace posible tener dos plugins diferentes, por lo que dos objetos diferentes con el mismo método (función). El conflicto se elimina gracias a la nomenclatura de las diferentes clases y sus instancias.

Sketch plug-in

Habiendo dicho todo esto, vemos cómo hacer un boceto (que se encuentra al día en un repositorio de Google Code Saidmade ), un esqueleto, puede volver a utilizar cada vez que tenemos que escribir un plugin. En primer lugar todos los objetos en la nueva organización para que nos demos cuenta de que si bien es cierto que hay una separación de la "red" entre el back-end y el front-end también es cierto que algunas "características" son y serán compartidos! Esto, a nivel de programación orientada a objetos, señala el camino a seguir a lo largo de una organización de código posible. Por ejemplo, la intuición sugiere que la creación de una clase "madre", es decir, una clase de la cual se derivan las clases de "cliente" (parte delantera) y "admin" (back end), que sería una buena cosa!
Esta clase de "madre" que contienen todas las propiedades (variables) y métodos (funciones) ambientes compartidos por front-end y back-end:

wpplugin

Así que tendremos a nuestra clase "madre" y dos clases para el front-end y back-end:

1
2
3
sketch_class.php-wp / / los padres de clase
sketch_admin.php-wp / / clase para el back-end
sketch_client.php-wp / / clase para el front-end

El archivo principal ( wp-sketch.php ) sólo se incluirán en una manera oportuna, y crear instancias de estas clases correctamente:

1
2
3
4
5
6
7
8
9
10
'wp-sketch_class.php' ) ; // load the core class require_once ('wp-sketch_class.php') / / cargar la clase principal

is_admin ( ) ) { // check admin if (is_admin ()) {/ / Comprobar admin
'wp-sketch_admin.php' ) ; // load admin class require_once ('wp-sketch_admin.php') / / carga de clase admin
/ /
new WPSKETCH_ADMIN ( ) ; // create object Wp_sketch_admin WPSKETCH_ADMIN $ = new () / / crear el objeto
{ Else {}
'wp-sketch_client.php' ) ; // load client front-end class require_once ('wp-sketch_client.php') / cliente / carga front-end de clase
new WPSKETCH_CLIENT ( ) ; // create object Wp_sketch_client WPSKETCH_CLIENT $ = new () / / crear el objeto
}

) ei nomi delle classi stesse ( WPSKETCH_ADMIN e WPSKETCH_CLIENT ), ma non i metodi e le proprietà in esse presenti. Este "contexto" sólo hay que tener cuidado de un concepto único sobre las variables que contienen instancias de clases ( $wp_sketch_admin y $wp_sketch_client ) y los nombres de las clases mismas ( WPSKETCH_ADMIN y WPSKETCH_CLIENT ), pero los métodos y propiedades que contienen .

sono “sottoclassi” (figli) di WPSKETCH_CLASS , definita nel file wp-sketch_class.php . Ambas clases WPSKETCH_ADMIN y WPSKETCH_CLIENT son "subclases" (los niños) de WPSKETCH_CLASS , definida en el archivo wp-sketch_class.php . Esto, como se mencionó anteriormente, sólo contendrá los elementos compartidos (variables y funciones), ya que siempre se carga independientemente de si estamos en el back-end o front-end.

En conclusión ...

Puede descargar todo el esqueleto de la Saidmade repositorio Google Code . . En este también se encuentra un archivo wp-sketch_functions.php , que se utiliza para evitar que las llamadas a funciones en un front-end para traducir una llamada oggetto->metodo() . De hecho, es un archivo opcional no siempre es necesario.

La posible evolución de este enfoque son siempre una mejor identificación de la sección en la que estamos operando y WordPress, y en este sentido, una amplia gama de acciones de optimización a realizar, con el fin de cargar sólo el código necesario y cuando necesitamos realmente. Ulteiori ejemplos de este lado vamos a ver pronto.

9 comentarios en "Sobre la estructura de los objetos de un plugin para Wordpress"

  1. 24 de abril 2009 la creación de laboratorios de Saidmade "sitio web, desarrollo de aplicaciones web, marketing viral :

    [...] Una de las técnicas para escribir rápidamente un plugin de WordPress se puede preparar un esqueleto (croquis) para comenzar. Especificaciones de WordPress, de hecho, a menudo conducen a tener plugins estructuralmente muy similares, en realidad, son los nombres de funciones y su cambio de contenido. Sin embargo, en la preparación de un esqueleto, tenga en cuenta no duplicar nombres, constantes o funciones utilizadas por otras personas (incluyendo el nuestro) plugin, de lo contrario obtener un plugins errore.Tutti activo comparten la misma área de operación. Así que si un plugin tiene una función que se llama abc_normalize () no otros plugins pueden tener una función con un nombre identico.Caso de forma remota? ¿Coincidencia? Aunque a primera vista parece una cosa muy insignificante, es muy molesto cuando sucede, sobre todo para el usuario final que se encuentra incapaz de usar un plugin. También en la definición de las constantes (por ejemplo, TABLE_NAME, WP_MAIN_PATH, etc ...) es mucho más común de obtener duplicados. Para más detalles: En la estructura de los objetos de un plugin para Wordpress [...]

  2. 25 de abril 2009 Lo mejor de la semana # 15 | BigThink :

    [...] En la estructura de un plugin de WordPress objeto Cómo estructurar las clases de un plugin de WordPress para la carga óptima y la reutilización de código. [...]

  3. 26 de abril 2009 La noticia de la parte superior de la web de la semana (20 al 25 Abril 09) :

    [...] Esta serie con la continuación natural del artículo de Napolux, estructura u objeto con un blog wordpress plugin [...]

  4. 03 de mayo 2009 Mejor de la Semana # 18 | Gioxx la pared :

    [...] En la estructura de los objetos de un plugin para Wordpress [...]

  5. 19 de mayo 2009 Serdominik :

    Hola he leído este gran artículo y quería hacerte una pregunta: He creado un plugin para la gestión de los productos clasificados por categorías y otras categorías de wp creado por mí con otras tablas en la plguin back-end trabaja duro para hacer que funcione perfectamente situado en el front-end que no sé cómo mostrar la lista de productos para venta al por menor ... es decir, nn saber cómo hacer que funcione con mod rewrite permalinks estaría actuando muy bien.
    que me haga saber
    Domingo

  6. 20 de mayo 2009 Giovambattista Fazioli :

    @ Serdominik: Hola Domingo, ¿podría decirme algo más en detalle lo que usted necesita?

  7. 23 de mayo 2009 Serdominik :

    @ Giovambattista Fazioli:
    Hola, gracias por darme una respuesta.

    Mi pregunta es muy difícil de entender en unas pocas líneas de texto y la escritura es difícil de hacer entender (lo siento si te doy la) y otra difícil de seguir los comentarios a través de las preguntas y respuestas para mí, así, entre muchas cosas que me olvide de ir a ver Si por casualidad te veo respondió hoy, después de 3 días. Si quieres y si te sientes nn es un trastorno a través de MSN o Skype o correo electrónico

    Desafortunadamente, muchos prefieren no hacer comentarios sobre los detalles del proyecto que estoy haciendo

  8. 26 de junio 2010 fabricante de Wordpress Plugin | Undolog.com :

    [...] El código de producto sigue el estándar orientado a objetos en la estructura de los objetos descritos en un plugin para Wordpress [...]

  9. 19 de marzo 2011 en WordCamp Knowcamp: 10 cosas más :

    Discusión [...] sobre la estructura de un plug-in está disponible en: En la estructura de los objetos de un plugin para Wordpress, que muestra un esqueleto posible que un paquete correctamente [...]

Deja un comentario

XHTML PERMISO TAG: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> código de inserción:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL 


Dejar de SOPA