En la estructura de un objeto plugin para Wordpress

Viernes, 24 de abril 2009

Si nos basamos en el hellodolly.php ejemplo sencillo powered by Wordpress, o incluso la misma documentación oficial nunca vamos a llegar a la redacción de un plug buena y eficaz-en. Aquí, se analiza una posible estructura, y un esqueleto que se pueden utilizar varias veces.

Conceptos básicos

En primer lugar debemos comprender cómo y cuándo un plugin para Wordpress se carga en el sistema. Al activar un plugin de la administración, el archivo que contiene el código principal, reconocida por las líneas clásicas de comentario:

PHP:
  1. / *
  2. Nombre del Plugin: Mi Plugin
  3. Plugin URI: http://wordpress.org/extend/plugins/mioplugin/
  4. Descripción: Descripción de mi plugin de
  5. Versión: 1.0.0
  6. Autor: Giovambattista Fazioli
  7. Author URI: http://labs.saidmade.com
  8. * /

está cargado o si hay en el front-end es donde estamos en la administración (back-end):

Schema di caricamento di un Plugin Wordpress

Este comportamiento es en sí correcto, y probablemente en muchos casos no se tiene en cuenta por el desarrollador. Además, algunos plugins tienen una estructura (por ejemplo, no han impuesto y por lo tanto no necesitan de una administración), que haría innecesario insistir sobre este punto.
Sin embargo, debe tenerse en cuenta que algunos plugins tienen una administración coherente, es decir, traen consigo una gran cantidad de código utilizado sólo en el backend de WordPress. En estos casos, si usted no toma las precauciones que riesgos para la carga de la parte delantera, la parte visible de los navegantes, código que no es completamente inútil carga demasiado pesada en el blog.

Posibles conflictos: namespace

De lo anterior se desprende otro hecho importante: todos los plugins de Wordpress son cargados en la misma zona de operaciones, lo que resulta en la desafortunada consecuencia de que si dos plugins diferentes tienen una función (una variable o constante) tiene el mismo nombre, estas entrarán en conflicto con los otros!

Lo ideal, por lo tanto, sería capaz de:

  • Para separar el código de carga para el front-end y back-end de
  • Proteger el "espacio de nombres" para evitar posibles conflictos con otros plugins están cargados

Front-end o back-end?

La forma más fácil de determinar si está en la administración (back-end) es llamar a la is_admin() función is_admin()

PHP:
  1. is_admin ( ) ) // includi il codice lato back-end if (is_admin ()) / / incluir el código del back-end
  2. else / / include frente código del lado del extremo

En la práctica, esquemática, podemos lograr:

Font-end, Back-end

Significado:

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

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

Para evitar la superposición desagradables es una buena manera de "envolver" nuestra función y las variables en un envase adecuado: los objetos. La definición de una clase tienen más oportunidad de proteger los nombres de nuestras funciones como la obtención de beneficios adicionales que pueden reutilizar el código en el plugin de futuro. Esta técnica permite 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 Plugin

Dicho todo esto, ver cómo hacer un esquema (que puede encontrar al día en el repositorio del código de Google de Saidmade), un esqueleto, puede volver a utilizar cada vez que tenemos que escribir un plugin. En primer lugar, el objeto de la nueva organización Démonos cuenta de que si bien es cierto que hay una por separado "red" entre el back-end y front-end que también es cierto que algunas "funciones" son y serán compartidos! Esto, en términos de programación orientada a objetos, nos muestra el camino percorrerre en 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 que derivar nuestra clase "cliente" (front-end) y "admin" (back-end), sería una buena cosa!
Esta clase de "madre" contendrá todas las propiedades (variables) y métodos (funciones) comparte entornos front-end y back-end:

wpplugin

Nosotros por lo tanto nuestra clase "madre" y dos clases específicas para el front-end y back-end:

CÓDIGO:
  1. WP-sketch_class. php / / clase padre
  2. WP-sketch_admin. php / / clase para el back-end
  3. WP-sketch_client. php / / clase de front-end

El archivo principal wp-sketch.php sólo incluirá como corresponda, y crear instancias de estas clases, así:

PHP:
  1. 'wp-sketch_class.php' ) ; // load the core class require ( 'wp-sketch_class.php'); / / cargar la clase principal
  2. is_admin ( ) ) { // check admin if (is_admin ()) (/ / admin de verificación
  3. 'wp-sketch_admin.php' ) ; // load admin class require ( 'wp-sketch_admin.php'), / / admin clase de carga
  4. / /
  5. new WPSKETCH_ADMIN ( ) ; // create object $ Wp_sketch_admin = WPSKETCH_ADMIN nuevo () / / crear el objeto
  6. { ) Else (
  7. 'wp-sketch_client.php' ) ; // load client front-end class require ( 'wp-sketch_client.php'), / / cliente front-end de carga de clase
  8. new WPSKETCH_CLIENT ( ) ; // create object $ Wp_sketch_client = WPSKETCH_CLIENT nuevo () / / crear el objeto
  9. )

En este "contexto" sólo hay que tener cuidado de definir las variables únicas que contienen instancias de clases $wp_sketch_admin y $wp_sketch_client y los nombres de las propias clases WPSKETCH_ADMIN y WPSKETCH_CLIENT pero los métodos y propiedades que presentan .

Ambas clases WPSKETCH_ADMIN y WPSKETCH_CLIENT son "subclases" (niños) de WPSKETCH_CLASS definido en el wp-sketch_class.php Esto, como se mencionó anteriormente, sólo debe contener los elementos compartidos (variables y funciones), ya que siempre se carga independientemente de si estamos en el back-end o front-end.

Conclusión ...

Usted puede descargar todo el esqueleto de depósito del Código de Google de Saidmade. Esto también se encuentra un wp-sketch_functions.php se usa para prevenir las llamadas a funciones en el front-end se tradujo un oggetto->metodo() De hecho, es un archivo opcional no siempre es necesario.

Evolución posible de este enfoque son siempre la mejor identificación de la sección en la que estamos operando y Wordpress, y en este sentido, ofrece numerosas medidas de optimización que deben adoptarse con el fin de cargar sólo el código necesario y cuando realmente se necesita. Ulteiori ejemplos de este lado vamos a ver pronto.

Post relacionados

Fue útil esta información?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Cargando ...

7 Comentarios a: "En la estructura de un objeto plugin para Wordpress"

  1. getAvatar 1,0
    24 de abril 2009 Saidmade Labs creación de sitios web, desarrollo de aplicaciones web, marketing viral:

    [...] Una técnica para escribir rápidamente un plugin para Wordpress puede ser preparar un esqueleto (esquema) para comenzar. Especificaciones de Wordpress, de hecho, a menudo conducen a que los plugins estructuralmente muy similar, de hecho, son los nombres de las funciones y cambiar su contenido. Sin embargo, en la preparación de un esqueleto, hay que tener en cuenta no duplicar constante o nombres de las funciones utilizadas por otros (incluyendo el nuestro) plugin, errore.Tutti obtener una penalidad de plugins comparten la misma área activa de la operación. Así que si un plugin tiene una función llamada abc_normalize () No hay otro plugin puede tener una función con un nombre identico.Caso remota? ¿Coincidencia? Aunque a primera vista parece una cuestión totalmente despreciable, cuando pasa es muy molesto, especialmente para el usuario final que se encuentra incapaz de utilizar un plugin. También la definición de las constantes (TABLE_NAME tal, WP_MAIN_PATH, etc ...) es mucho más común para obtener duplicados. Para más detalles: En la estructura de un objeto plugin para Wordpress [...]

  2. getAvatar 1,0
    25 de abril 2009 Pick of the Week # 15 | BigThink:

    [...] En la estructura de un objeto WordPress Plugin forma de estructurar las clases en un plugin de WordPress para optimizar la carga y la reutilización de código. [...]

  3. getAvatar 1,0
    26 de abril 2009 las principales noticias en la web de esta semana (20-25 Apr. 09):

    [...] Este rodeo con la continuación natural del artículo de Napolux o con objetos de la estructura en un blog wordpress plugin [...]

  4. getAvatar 1,0
    03 maggio, 2009 Lo Mejor de la Semana # 18 | Wall Gioxx del:

    [...] En la estructura de un objeto plugin para Wordpress [...]

  5. getAvatar 1,0
    19 de mayo 2009 Serdominik:

    Hola he leído este artículo grande y yo quería hacerle una pregunta: He creado un plugin para la gestión de categorías de productos clasificados por WP creado por mí y otros de otras tablas, el plguin la parte posterior trabajo final duro para que funcione perfectamente ubicado en el front-end que no sé cómo mostrar los productos tanto para la lista de los detalles ... nn es decir, saber cómo conseguir que funcione con el mod rewrite permalinks estaría actuando muy bien.
    let me know
    Domenico

  6. getAvatar 1,0
    20 de mayo 2009 Giovambattista Fazioli:

    @ Serdominik: Hola Domingo, es mejor explicar en detalle lo que quieres lograr?

  7. getAvatar 1,0
    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 es difícil de escribir para hacer entender (lo siento si no de ustedes) y luego difícil de seguir a través de los comentarios y responde a las preguntas para mí, porque de tantas cosas me olvide de ir a comprobar si por casualidad te veo respondió hoy después de 3 días. Mira por ti mismo y si nn es un trastorno de sentir a través de MSN o Skype o e-mail

    Desafortunadamente, muchos prefieren no hacer comentarios sobre los detalles del proyecto que me estoy dando cuenta de

Deja tu comentario

TAG XHTML RESTRICCIONES: <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 [as][/as]           // Actionscript [css][/css]         // CSS Style Sheet [html][/html]       // HTML [js][/js]           // Javascript [objc][/objc]       // Objective-C [php][/php]         // PHP [sql][/sql]         // SQL