En el último tutorial, revisamos el estado original de nuestro autocargador y luego pasamos por un proceso de análisis y diseño orientado a objetos. El propósito de hacer esto es para que podamos unir todo lo que hemos cubierto en esta serie y la serie introductoria..
En segundo lugar, el propósito de hacer esto en su propio tutorial es que podamos pasar el resto de este tiempo recorriendo nuestra clase, viendo cómo encaja cada parte, implementándola en nuestro complemento y luego viendo cómo aplicar la programación orientada a objetos y el El principio de responsabilidad única puede llevar a una solución más enfocada y mantenible..
En este punto, asumo que has estado siguiendo esta serie. Si no es así, por favor revise la parte uno y la parte dos. Este asume que has estado siguiendo hasta ahora.
Si eres un principiante, también recomiendo leer la serie inicial en su totalidad. Una vez que esté al día, debería estar en una buena posición para terminar la serie, ya que concluimos con el resto del código fuente cubierto en este tutorial..
Para proporcionar un resumen rápido y asegurarnos de que todos estemos en la misma página, hemos cubierto los siguientes temas de esta serie:
En este punto, estamos listos para intercambiar nuestro cargador automático existente con el código basado en objetos. Tenga en cuenta, sin embargo, que esto no será una simple cuestión de cambiar archivos.
En lugar de eso, necesitaremos crear los archivos, asegurarnos de que siguen los Estándares de codificación de WordPress, implementarlos, probar su implementación para asegurarse de que el complemento aún funciona y luego eliminar el autocargador existente..
Parece un montón de trabajo, pero si nuestro análisis y diseño del tutorial anterior se realizó correctamente y resulta ser preciso, no tendremos problemas para hacer todo lo que se menciona arriba..
Antes de saltar a la implementación, quiero proporcionar un resumen rápido del entorno de desarrollo que debe tener en su sistema. Técnicamente, esto es algo que ya debería haber ejecutado según las instrucciones de los tutoriales anteriores, pero quiero ser lo más completo posible.
Dicho esto, vamos a empezar.
En esta sección, vamos a revisar todo el código que revisamos en el tutorial anterior; Sin embargo, veremos cada archivo individual junto con la documentación completa..
Además, lo incluiremos en nuestro proyecto para que al final del tutorial podamos usar este código en lugar del código único basado en procedimientos que usamos anteriormente..
Tenga en cuenta que cada uno de los siguientes archivos debe nombrarse como se indica y debe incluirse en el Cía
directorio. Además, todo esto está disponible para descargar usando el botón azul en la barra lateral de esta publicación..
namespace_validator = new NamespaceValidator (); $ this-> file_registry = new FileRegistry (); / ** * Intenta cargar el nombre de archivo especificado. * * @param string $ nombre_archivo La ruta al archivo que estamos intentando cargar. * / public function load ($ filename) si ($ this-> namespace_validator-> is_valid ($ filename)) $ this-> file_registry-> load ($ filename);
class-file-investigator.php
get_file_name ($ file_parts, $ current, $ i); if (count ($ file_parts) - 1! == $ i) $ filepath = trailingslashit ($ filepath); devolver $ filepath; / ** * Recupera la ubicación de parte del nombre de archivo en el disco según el índice actual de la matriz que se está examinando. * * @access private * @param array $ file_parts La matriz de todas las partes del nombre del archivo. * @param string $ current La parte actual del archivo a examinar. * @param int $ i El índice actual de la matriz de $ file_parts para examinar. * @return string El nombre del archivo en el disco. * / private function get_file_name ($ file_parts, $ current, $ i) $ filename = "; if (count ($ file_parts) - 1 === $ i) if ($ this-> is_interface ($ file_parts)) $ filename = $ this-> get_interface_name ($ file_parts); else $ filename = $ this-> get_class_name ($ current); else else $ person = $ this-> get_namespace_name ($ current); ; / ** * Determina si el archivo especificado que se está examinando es una interfaz. * * @Access private * @param array $ file_parts Las partes de la ruta de archivo a examinar. * @Return bool True si la interfaz está contenida en el nombre del archivo; de lo contrario , false. * / private function is_interface ($ file_parts) return strpos (strtolower ($ file_parts [count ($ file_parts) - 1]), 'interface'); / ** * Recupera el nombre de archivo de la interfaz basado en partes específicas del archivo pasadas * al autocargador. * * @access private * @param array $ file_parts La matriz de partes del archivo a examinar. * @return string El nombre de archivo de la interfaz. * / private fu nction get_interface_name ($ file_parts) $ interface_name = explode ('_', $ file_parts [count ($ file_parts) - 1]); $ interface_name = $ interface_name [0]; devuelve "interface- $ interface_name.php"; / ** * Genera el nombre del nombre de archivo de la clase en el disco. * * @access private * @param string $ current La parte actual del nombre del archivo a examinar. * @return string El nombre de archivo de la clase en el disco. * / private function get_class_name ($ current) return "class- $ current.php"; / ** * Crea una asignación del espacio de nombres a la estructura del directorio. * * @access private * @param string $ current La parte actual del archivo a examinar. * @return string La ruta de la asignación del espacio de nombres a la estructura del directorio. * / función privada get_namespace_name ($ current) return '/'. $ corriente;class-file-registry.php
investigador = nuevo FileInvestigator (); / ** * Utiliza el investigador de archivos para recuperar la ubicación del archivo en el disco. Si se encuentra, entonces * lo incluirá en el proyecto; de lo contrario, lanzará un mensaje de error de WordPress. * * @param string $ filepath La ruta al archivo en disco para incluir en el complemento. * / public function load ($ filepath) $ filepath = $ this-> investigator-> get_filetype ($ filepath); $ filepath = rtrim (plugin_dir_path (dirname (__FILE__)), '/'). $ filepath; if (file_exists ($ filepath)) include_once ($ filepath); else wp_die (esc_html ('El archivo especificado no existe.'));Incluyendo los archivos, iniciando el autocargador
Ahora que hemos creado nuestros archivos, necesitamos hacer dos pequeños cambios más:
- Necesitamos incluir todas las clases en el directorio inc..
- Necesitamos deshacernos del antiguo código del autocargador..
- Y necesitamos usar nuestro nuevo autocargador con el
spl_autoload_register
función.En última instancia, la versión final de autoload.php debería tener este aspecto:
Y logrará exactamente lo que hemos descrito anteriormente..
Pero espera, estoy recibiendo un error!
En este punto, has hecho mucho trabajo. Usted ha refaccionado su cargador automático completo para usar la programación orientada a objetos. Has documentado tus clases y funciones. Ha creado nuevos archivos, ha eliminado el código de los archivos antiguos y está listo para asegurarse de que todo funciona como se esperaba.
Entonces, como haría cualquier desarrollador, inicia la ventana del navegador para actualizar la página, solo para que aparezca un mensaje de error:
Por suerte, esta es una solución fácil. El problema es que estamos intentando agregar nuestro meta box demasiado pronto. Para solucionar esto, actualizaremos el
en eso
método en nuestroMeta_Box
clase para incluir esto:Y luego presentaremos una función que se enganchará al trabajo que acabamos de hacer:
display, 'render'), 'post', 'side', 'high');En este punto, debe poder ejecutar el nuevo código sin problemas, sin advertencias, sin avisos y sin errores.
Conclusión
Trabajar a través de todo esto podría haber parecido mucho, ¡y lo fue! Pero lo bueno es que cubrió mucho terreno en tres tutoriales., y Se basó en el trabajo de una serie anterior. En ese sentido, se cubrieron muchos temas nuevos y se aprendieron nuevas técnicas..
Tenga en cuenta que escribo regularmente para Envato Tuts +, y puede encontrar todos mis tutoriales anteriores en mi página de perfil. Además, a menudo discuto el desarrollo de software en el contexto de WordPress en mi blog y en Twitter, así que no dude en seguirme en cualquier lugar..
Dicho esto, estudie el código que hemos cubierto a lo largo de esta serie (y quizás el anterior) y vea si no puede emplear algunas de estas técnicas en su trabajo actual o futuro..
Recursos