Programación orientada a objetos en WordPress Construyendo el complemento I

En este punto de la serie, estamos finalmente capaz de comenzar a construir nuestro complemento utilizando las técnicas orientadas a objetos que hemos aprendido hasta ahora en la serie.

Si solo te unes a nosotros, te recomiendo que te pongas al día con la serie hasta ahora; de lo contrario, corre el riesgo de perderse algunos de los puntos clave que vamos a demostrar a medida que desarrollamos el complemento en los próximos artículos..

  1. Una introducción
  2. Las clases
  3. Los tipos
  4. Estructuras de control: sentencias condicionales
  5. Estructuras de control: Bucles
  6. Funciones y atributos
  7. Alcance

Muy bien, entonces con eso dicho, finalmente es hora de comenzar a escribir código. Antes de comenzar, es importante comprender que la creación de un complemento, o cualquier tipo de software, requiere una serie de pasos, y aunque vamos a escribir un poco de código en este artículo en particular, no lo haremos. agregando mucha funcionalidad hasta que tengamos el andamiaje o la base del complemento.

Para hacer eso, necesitamos revisar varias cosas:

  1. Definiendo las características del plugin que vamos a escribir.,
  2. Comparte cualquier cosa que no estemos construyendo en esta primera versión.,
  3. Discutir la arquitectura y la organización de archivos del plugin..

Así que vamos a cubrir esos puntos muy rápido, y luego entraremos en los detalles del complemento.

Post Meta Viewer

A lo largo de los próximos artículos, construiremos un complemento que introduce un cuadro de meta en la vista del editor de publicación única que muestra todos los metadatos asociados con la publicación actual..

1. Las características

El plugin será de solo lectura ya que solo puedes ver Los metadatos asociados con el complemento. No podremos introducir nuevos metadatos, al menos no para la primera versión..

Las otras características son que lo mostrará en un formato limpio y organizado para que podamos identificar fácilmente la clave y los valores para la ID de la publicación. También presentaremos un ancla que nos permitirá copiar una línea de código que nos permitirá hacer una llamada a la información en forma de get_post_meta ($ post_id, $ meta_key, $ meta_value);.

2. Un fuerte 1.0

Antes de continuar, hay muchas características interesantes que podríamos implementar en este complemento.. 

Podríamos introducir la capacidad de:

  • añadir nuevos metadatos de entrada personalizados
  • actualizar los metadatos de correos existentes
  • eliminar metadatos de entrada existentes
  • ordenar las columnas por meta claves
  • ordenar las columnas por valores meta
  • … y así

Pero de acuerdo con la filosofía de crear un "fuerte 1.0", estaremos construyendo una base ágil y enfocada en la que podemos continuar desarrollando el complemento como lo consideremos adecuado después de esta serie..

Tal vez cubriremos algunas de las características anteriores antes del final de la serie, tal vez desee presentar su propio conjunto de características. De cualquier manera está bien. La conclusión es que vamos a construir un núcleo sólido a partir del cual podemos continuar iterando para expandir la funcionalidad.

3. La arquitectura y organización de archivos.

Así que con todo lo dicho, primero hablemos de los puntos altos del complemento, luego veremos cómo organizaremos los archivos y los componentes del complemento..

  • El complemento requiere un archivo de complemento básico que servirá como una especie de cargador de inicio (o archivo de rutina de carga) para registrarse para WordPress y para cargar los componentes del complemento..
  • El complemento necesitará una clase que coordine los enlaces y las devoluciones de llamadas utilizadas en todo el complemento. Esto ayudará a desacoplar la funcionalidad de los ganchos y las clases responsables de mostrar realmente el trabajo, lo que nos permite asegurarnos de que cada una de nuestras clases esté especializada e idealmente realice un solo trabajo..
  • El complemento necesitará una clase que se encargará de mostrar la información en el tablero de mandos único que realmente mostrará el cuadro de meta.. 
  • Necesitaremos una clase de complemento central que registrará todas las dependencias y proporcionará información sobre la versión del complemento, es consciente del cargador y la funcionalidad de administración para registrar información entre los dos componentes..
  • Y, finalmente, necesitaremos algunas hojas de estilo para asegurarnos de que la información se vea bien dentro del tablero.

¿Suena confuso? Esperamos que ver y echar un vistazo a la estructura del archivo y al código de muestra básico ayude a que esto siga teniendo más sentido..

Dicho esto, echemos un vistazo de alto nivel a los componentes que interactuarán entre sí, luego analizaremos cómo se organizarán los archivos. Después de eso, nos pondremos en contacto con el código del complemento que completaremos en el siguiente artículo..

Componentes de plugin

Específicamente, el complemento constará de los siguientes componentes (o archivos) que conformarán la fuente del complemento. Después de echar un vistazo a la lista de archivos, vamos a echar un vistazo a un diagrama de cómo interactúan todas las piezas.

  • single-post-meta-manager.php es el archivo principal, registra el plugin con WordPress y pone todo en movimiento.
  • class-single-post-meta-manager-admin.php es el archivo responsable del registro y la puesta en cola de las hojas de estilo, así como de mostrar los elementos de la interfaz de usuario que contendrán los metadatos posteriores..
  • single-post-meta-manager-admin.css es la hoja de estilo que estilizará la interfaz de usuario.
  • class-single-post-meta-manager-loader.php es el archivo que coordinará las acciones y los filtros entre el complemento principal y la clase de administración.
  • class-single-post-meta-manager.php es el archivo principal del complemento que mantiene la información de la versión del complemento, la información de la barra del complemento, las referencias al cargador y el archivo en el que le indicamos al cargador qué objetos y funciones son responsables de mostrar la interfaz administrativa del usuario.
  • README.md proporciona las instrucciones habituales sobre cómo comenzar con el complemento.
  • CAMBIOS.md proporciona una lista de los cambios que se producen en cada versión del complemento que lanzamos.

Dependiendo de su nivel de experiencia con la programación orientada a objetos, esto puede o no parecer una gran cantidad de archivos para un conjunto de funciones relativamente simple; sin embargo, aún hay más: no vamos a colocar todos estos archivos en la raíz del directorio del complemento.

En su lugar, vamos a ir un paso más allá y organizar las cosas en directorios apropiados, también. Una vez que revisemos eso, veremos la organización de los componentes en forma de diagrama y luego revisaremos el código que proporciona los andamios para el complemento..

Organización de archivos

La organización de archivos es relativamente simple y probablemente se demuestre mejor a través del uso de una imagen:

Para que quede claro, aquí está el desglose de lo que ve en la captura de pantalla anterior:

  • admin / class-single-post-meta-manager-admin.php
  • admin / css / single-post-meta-manager.admin.css
  • incluye / class-single-post-meta-manager-loader.php
  • incluye / class-single-post-meta-manager.php
  • idiomas /
  • single-post-meta-manager.php
  • CAMBIOS.md
  • README.md
  • LICENCIA.txt

Es importante reconocer esto y hay un par de lugares en el código donde vamos a registrar las dependencias y es importante saber dónde Las dependencias son para que podamos proporcionarles los caminos adecuados..

Construyendo el Plugin

En este punto, estamos listos para comenzar a eliminar las clases que vamos a usar. Hay varias cosas importantes que debes tener en cuenta sobre el código que estás a punto de ver:

  • Solo vamos a eliminar las clases y los métodos, no introduciremos ninguna funcionalidad real en este artículo..
  • Al final de la implementación, el plugin. debería aparece en el panel de WordPress y puede activarse (aunque en realidad no sucederá nada).
  • A pesar del hecho de que creo que la documentación es clave para el desarrollo de la calidad, no presentaremos los comentarios en este artículo porque se debe hacer una compensación: este artículo puede volverse excesivamente largo con una cantidad extraordinaria de detalles, o podemos continuar Para tomar cada aspecto de esta serie paso a paso. Estoy optando por hacer lo último para no estar abrumados con la cantidad de información.

Dicho esto, si tiene preguntas sobre el código, no dude en dejar comentarios al respecto; Sin embargo, puedo decir que espere hasta el próximo artículo para ver la respuesta..

Ahora, al código.

El archivo del plugin Core

El archivo del complemento del núcleo es responsable de registrar el complemento con WordPress y, en última instancia, será responsable de importar la clase del complemento del núcleo (que revisaremos en un momento), y de configurar el complemento en movimiento..

Tenga en cuenta que el condicional que tenemos al final del archivo. Esto asegurará que no se pueda acceder al archivo del complemento directamente desde el navegador web.

Archivos Administrativos

Todos estos archivos residen en el administración directorio como se indica arriba.

La clase de administrador de Meta Manager de un solo puesto

Esta clase encolará la hoja de estilo y renderizará el meta box que se usará para mostrar el meta dado..

version = $ version;  public function enqueue_styles ()  public function add_meta_box () 

En esta clase, observe que tiene un único atributo protegido para el $ versión del plugin. Este atributo se configura en el constructor de la clase..

Veremos cómo encaja esto más adelante en el código..

La hoja de estilo de Meta Manager de un solo mensaje

En este momento, no hay código que mostrar para este archivo en particular; sin embargo, adelante y agréguelo a la admin / css subdirectorio ya que es lo que eventualmente usaremos para diseñar el panel de control.

Incluye

Estos son archivos de complementos principales que son responsables de coordinar la información entre los diversos enlaces y el área administrativa del complemento..

Cargador de Meta Manager de un solo puesto

Esta clase será utilizada por la clase de complemento principal para coordinar todos los enlaces que existen en el complemento y la clase administrativa que definimos anteriormente.

Tenga en cuenta que en la clase anterior, hemos marcado los atributos como protegido. Esto se hace para que esta clase tenga acceso a sus atributos, pero ninguna otra clase sí..

Además, hemos seguido adelante y hemos hecho esto en caso de que clasifiquemos esta clase en particular en una futura iteración del complemento..

Post Manager de un solo post

Finalmente, tenemos que la clase de complemento principal es responsable de cargar las dependencias, establecer la configuración regional y coordinar los enlaces..

plugin_slug = 'single-post-meta-manager-slug'; $ this-> version = '0.1.0';  private function load_dependencies ()  private function define_admin_hooks ()  public function run ()  public function get_version () return $ this-> version; 

Aviso en el código anterior, tenemos adicional protegido atributos, un par de privado funciones, y un público función utilizada como captador que utilizaremos a medida que continuemos desarrollando el complemento.

En el siguiente artículo, pasaremos mucho tiempo en esta clase, ya que este es el punto de entrada para la mayoría de las funcionalidades..

A continuación

Hemos cubierto mucho material en este artículo, pero obviamente hay mucho más que hacer. Además de proporcionar documentación para nuestras funciones, necesitamos implementar una funcionalidad que dé vida a este andamio.

En el siguiente artículo de la serie, vamos a hacer precisamente eso, después de lo cual centraremos nuestra atención en documentar el código..

Como se mencionó anteriormente, siéntase libre de dejar cualquier pregunta y / o comentario sobre el código anterior. Para aquellos que estén interesados, siempre puede navegar el estado actual del proyecto en GitHub.

Hasta el próximo artículo.!