 Hola, qué tal? Muy buenas. Gracias por invitarme al WorldCam. Para mí es un gusto nuevamente estar compartiendo con la comunidad de WordPress una presentación. Mi nombre es Kailor Mendoza, algunos ya me conocen, para los que no, mucho gusto. El propósito de la presentación de hoy es un poco hablarles de lo que ha sido mi experiencia trabajando en plugins con WordPress y he querido nombrar la mi experiencia from zero to hero porque es un concepto que se veía mucho antes en YouTube, siempre from zero to hero, un video, dos minutos, tres minutos, entonces en un resumen les voy a contar un poco mi historia, lo que ha sido, entonces from zero to hero. Entonces, sin más, les comento que mis inicios, en mis inicios allá por el 2013, yo no conocía nada de WordPress, nada absolutamente nada, e incluso en lo que era el área web conocía muy poco, entonces recuerdo que mi primer trabajo me dieron un proyecto, un booking engine, pero dijo yo cómo lo voy a hacer, yo no sabía, yo escuchaba el término plugins y para mí era seguramente algo exagerado, digo yo algo que seguramente nunca voy a poder hacer. Entonces lo hice como un tema, una reingeniería de un tema y de hecho ya con el tiempo llegué a pensar que evidentemente era mucho más fácil hacerlo como un plugin. Entonces mis inicios fueron esos, hice un tema con un booking engine que no funcionó, entonces la gente dice lo que funciona, se deja así, siempre hay que mejorar y capturar que se puede mejorar para los siguientes proyectos y eso es lo que mi experiencia me ha dado que he ido capturando y mejorando con el tiempo. Recuerdo que parte también de mis primeros plugins fueron un famoso holamundo prácticamente donde lo que ponía eran shortcuts de WordPress y esas eran mis primeras funcionalidades, me llenaba de emoción saber que ya estaba haciendo un plugin, me podía digo y ahí fue donde yo dije voy a hacer mejores plugins cada día más. Entonces ahora les voy a hablar un poquito un resumen de lo que son plugins en WordPress. ¿Qué es un plugin? Un plugin se define como un segmento de código construido para ejecutar una funcionalidad específica, esa es como la teoría, ya hablándolo un poco en palabras más sencillas, lo que vamos a hacer con un plugin es encapsular alguna funcionalidad que se yo hablemos de un texto administrable, hablemos de un formulario, una galería de fotos, muchas funcionalidades, un plugin tiene funciones ilimitadas, podemos hacer lo que queramos dentro de un plugin. Y tampoco desarrollar un plugin requiere conocimientos demasiado avanzados, simplemente WordPress nos da la facilidad de hacer un plugin con estos dos pasos. ¿Qué tenemos que hacer? Entonces en la carpeta de plugins de WordPress uno crea una carpeta con el nombre que uno quiera y estos son los dos archivos necesarios, el primero el index PHP es opcional pero ahorita les voy a hablar sobre ese y el otro si es requerido, por lo general es el nombre del archivo, el nombre del plugin perdón con la extensión punto PHP y lo que se ve ahí en la captura es el encabezado que WordPress requiere para que se pueda crear el plugin de manera exitosa, que lleva ese encabezado, lleva lo que es el nombre del plugin, la URL del plugin, la descripción, la versión, el número de versión que es el que va cambiando conforme uno vaya librando nuevas actualizaciones del mismo, la versión mínima que requiere, esto es como un dato adicional u opcional que se puede agregar y la versión hasta la cual se ha testeado que este sí es muy importante, ¿por qué? porque siempre tenemos que debemos tener los plugins actualizados y compatibles con las últimas versiones de WordPress, si no WordPress nos va a marcar los plugins como que son que no han sido testeados y eso es una buena práctica que a mi parecer hace WordPress porque así cuando uno está haciendo instalación de plugins en un sitio nos da certeza que ese plugin tiene un buen mantenimiento, un buen soporte y que ha sido probado con las versiones más recientes de WordPress. El otro archivo index.mphp es importante porque nos va a dar seguridad, es por seguridad prácticamente. Al agregar este archivo index.mphp lo que hace es un archivo que va a ir vacido, uno le puede poner un comentario, por lo general los plugins de WordPress agregan un comentario que dice Silence Gold, los míos yo le agrego pura vida. Entonces es simplemente un archivo vacío que lo que nos va a prevenir es de que se pueda ingresar a ver el directorio de archivos de esa carpeta, entonces es más que todo por seguridad. Las estructuras de un plugin, el plugin como mencioné antes no requiere un conocimiento avanzado, tampoco requiere una estructura avanzada como se ve en otros desarrollos, por ejemplo el modelo vista control. Aquí no, aquí pueden ser desde estructuras personalizadas, un simple archivo.mphp, un simple archivo JavaScript, lo que sea, incluso se pueden hacer estructuras más elaboradas o lo que se llaman boilerplates que recientemente descubrí, bueno hace un tiempo descubrí que la línea de comandos de WordPress nos permite generar un boilerplate o un scaffold también que se le llama. Entonces cuando uno por medio de la línea de comandos genera digital los comandos necesarios para generar una base de un plugin, el ahí lo va a ir yando para crear el nombre, le pide el nombre, la versión, hasta cuál soporta, hasta cuál ha sido revisada la compatibilidad y nos genera el archivo que vimos anteriormente, el encabezado y es mucho mucho más fácil, sin embargo o como es en mi caso yo ya tengo una estructura pre definida entonces cuando ocupo hacer uno simplemente copio, pego o extiendo el que ya tengo y uso mi estructura personalizada. Adones, los plugins pueden ser extensiones de otros plugins padres, de funcionalidades de otros plugins, así como pueden ser plugins originales. De mi lado yo tengo de los dos tipos, yo tengo he hecho plugins originales con solicitudes específicas de clientes, llámense una galería, otras cosas, así como también he hecho extensiones de otros plugins, uno muy conocido es WooCommerce. WooCommerce es un plugin de comercio electrónico pero nos da la facilidad de extender su core, su núcleo para hacer plugins que sean compatibles con el core de WooCommerce. Llámense pasarelas de pago, llámense métodos de envío entre otras cosas y ahí es donde les voy a mencionar lo que son tipos de plugins porque también un plugin no me limita a que sea de un tipo específico, nada, es ilimitar las opciones que nos da un plugin y como les mencionaba antes y un caso muy, un ejemplo muy claro es WooCommerce porque nos permite hacer plugins de pasarelas de pago, plugins de métodos de envío, el comercio electrónico que es WooCommerce como tal es un plugin que es compatible con WordPress, entonces ya como tal ahí vemos un gran ejemplo, WooCommerce como plugin pero también nos permite extenderlo, también hay otros plugins muy conocidos como de formularios por ejemplo y también galerías ahí infinidad de plugins y ahí es donde entonces entra los plugins que están en WordPress.org o el repositorio de plugins de WordPress, ahí es donde entonces cualquier desarrollador tampoco necesita estar inscrito en la NASA para subir un plugin, afortunadamente cualquier desarrollador puede crear una cuenta, crearse un proyecto y subir un plugin que necesita simplemente una estructura bien organizada, un plugin que sea bien legible para que entonces se envía una revisión, se envíe ese plugin a revisión y una vez que sea probada, una revisión manual, una vez que sea probada, el plugin va a estar disponible en WordPress.org, esos son los plugins que hubo cuando está haciendo una instalación, cuando busca desde el panel administrador de WordPress agregar un plugin y hacer una búsqueda, todos esos plugins que aparecen ahí son los que se encuentran en WordPress.org, como les dije antes también uno puede subir sus plugins pero es muy importante darle suporte, ¿Por qué? Porque uno suba una versión y como como se dice popularmente funciona en mi compo pero puede que no funcione en demás dispositivos, bueno en demás sitios web, entonces es muy importante estar siempre revisando las compatibilidades y revisarlo en pruebas en múltiples instalaciones con diferentes escenarios y lo que me refiero con revisar compatibilidades por ejemplo va de la mano con por ejemplo el core de WordPress, siempre está revisando que sea compatible con las últimas versiones del core de WordPress, que también sea compatible si estamos trabajando un ADOM que siempre debe ser compatible con el plugin padre, llámense retomando el ejemplo Google Comers si estamos trabajando una pasarela de pago, siempre debemos estar de la mano trabajando con las actualizaciones que haga Google Comers para revisar de qué plugin no pierda esa compatibilidad, es muy importante siempre estar en esas revisiones, otro dato muy importante también es que y me ha pasado por experiencia que uno debe trabajarlo en un enfoque general, aquí me refiero cuando yo hago un plugin y le doy un mantenimiento y la revisión de compatibilidad yo debo trabajarlo para que funcione en múltiples sitios, debemos tener presente que esto no va a funcionar en un sitio, si está en el en el repository WordPress no siempre tiene que apuntar a mucho y me pasó por experiencia que yo lo subí, tal vez con poco pensando que tal vez no iba a tener un gran auge y afortunadamente lo tuvo entonces siempre pero siempre eso no nos debe desviar del propósito inicial, no es de que nos van a pedir tal vez una una compatibilidad con un plugin que es de pago y tal vez uno no lo pueda no lo puede hacer o tal vez sabemos que lo vamos a poner a poner a trabajar para ese que nos están pidiendo pero nos va a quebrar para otro entonces debemos tener eso muy en cuenta debemos trabajarlo en un foque general y no para para sitios específicos ya para sitios específicos ya sería tal vez contactar a esa persona a ese a ese cliente y darle una asesoría por separado pero no algo que nos vaya a afectar en algo para los demás sitios que tengan esa ese es instalación ahora bien ya les hablé un poco lo que es los plugins y un repaso general ahora sí les voy a explicar un poco lo que ha sido mi experiencia ahora sí from zero to hero como dije al inicio simplemente me gustó la frase from zero to hero porque la veía mucho antes en el libro en vídeos no es que me considero ahorita un héroe un guru de los plugins simplemente me me gustó la frase siempre siempre se está aprendiendo así que me considero que estoy en ese proceso siempre sigo aprendiendo ahora sí mi experiencia a lo largo de ya casi 9 años de estar trabajando en el área de desarrollo me he encontrado con con muchos proyectos muchos proyectos que han sido desafiantes al inicio el simple hecho de decir voy a hacer un plugin era un desafío para mí ahora esa experiencia que he ganado con el tiempo me da a que de una vez estoy recibiendo un requerimiento lo voy proyectando a hacerlo como un plugin ni siquiera como un tema por ejemplo que me digan hay que hacer un booking engine de un solo lo voy a hacer en un plugin que es un tema costum que estoy trabajando no importa hago el tema pero la funcionalidad del booking engine la hago un plugin porque el plugin me va a permitir si después tengo problemas con el tema o si el cliente quiere cambiar el tema ya esto me va a limitar si yo lo trabajé en un tema el plugin me va a dar la facilidad de portabilidad voy a portar voy a hacer portátil esa funcionalidad del booking engine para que funcione en múltiples plugins aunque sea para un múltiples temas aunque sea para el mismo cliente pero ya me pasó un caso entonces dijo no ahora mejor trabajarlo así y eso es lo que se gana con experiencia el poder prevenir que si ya ya me pasó prevenir los proyectos a futuro esa misma experiencia me ha hecho desarrollador de plugins o extensiones tanto para workers como para para go comers el cor de world de go comers es algo que he trabajado ya hace mucho tiempo atrás y es algo que lo extiendo bastante en múltiples integraciones he trabajado varias pasarelas de pago varios métodos de envío principalmente para el área aquí de costa rica entonces es muy importante siempre estar con eso hacerlos local pero también pensar globalmente y eso me pasó también con dos de mis plugins que tengo en el repositorio workers que son el wc pick up store y wc provincia cantón distrito este último refleja muy bien lo que lo que era mi pensar local en su momento porque aquí en costa rica llamamos a la distribución de de geográfica provincia cantones y distritos en muchos estados en muchos lugares puede ser estado ciudad etcétera entonces hice un plugin que fuera compatible con go comers para que en el checkout nos ayudara a buscar esa que fuera más fácil buscar un código de área una un cantón un distrito en el flujo del checkout personalmente aunque sea de costa rica aunque sea guanacaste yo no conozco las los códigos de área de mi zona ni siquiera los cantoñas o distritos entonces lo vi como fue como un proyecto solicitado e inicialmente para un cliente pero vi que era era una necesidad y y entonces decidí liberarlo en worldpress.org pero lo liberé de manera local digo yo para que funcione en costa rica afortunadamente me complace comentar que el plugin me ha abierto muchas puertas muchos contactos mucha gente me ha felicitado me ha pedido ayuda y yo gustoso desde he dado esa ayuda y entonces vi también la necesidad de que no era sólo en costa rica que pasó lo extendí lo lo abrí a que fuera compatible ya con múltiples países y que pasa ese plugin ahorita ha estado está funcional o por lo menos que me han pedido ayuda de desuforte en países como ecuador guatemala y también en lituania me parece si un país de esos lados para mí fue wow fue muy importante porque ver hasta dónde ha llegado ese plugin que era primero para costa rica y ya ha llegado a muchas partes es impresionante el otro doble el otro plugin wc pick up the store es una opción de envio que también vila necesidad si una persona quiere recoger su producto en una tienda específica pues que entonces bucomers me diera esa facilidad ese plugin nació como una necesidad porque las opciones que ven en su momento eran más de lo que se quería o tal vez no me daba lo que se quería en ese momento entonces lo lo desarrollé lo lo liberé pero no es sólo liberarlo es también darle ese ese ese seguimiento este sí fue pensado un poquito a que fuera que se podía usar muchas partes del mundo y así ha sido afortunadamente he recibido opciones de de soporte solicitudes de soporte de muchas partes y eso es muy muy gratificante los invito si quieren saber un poco más sobre estos plugins hace un tiempo hice una una meetup al respecto hablando de sus dos plugins lo pueden encontrar ahí en warpes.tv ahí está se ve de esa manera esa fotillo entonces los invito a que puedan ver un poco más de mis plugins en ese en ese vídeo como mencioné antes subir un plugin o tener un plugin en repositorio warpes es muy muy es una responsabilidad grande no es sólo lo subo y ya ahí lo dejo lo abandono no siempre requiere mucho sacrificio requiere mucho tiempo de trabajo tanto en desarrollos cuando nos piden soporte y pero al final les como les mencioné antes es gratificante ver este las puertas que abre las conexiones que abre no sólo local me abierto conexiones globalmente y eso para mí es súper emocionante también me este por medio de las de las vías de contacto que yo he dado tanto por medio de los plugins o por otros medios he tenido soporte externos y es parte de lo que como les mencionaba anteriormente uno tiene que hacer soportes generales del plugin una compatibilidad que que yo sé que me va a afectar tal vez con el core de warpes o con con el core de bucomers dado que ambos son ad-hons de bucomers pero cuando me dicen es que mi plugin no es compatible con con x plugin yo les puedo decir es que no está hecho para que sea compatible con ese yo le puedo hacer una compatibilidad a hacer un un abón distinto y eso me ha abierto conexiones laborales internacionales también porque he dado soporte a personas en chipre en brasil es muy emocionante en francia el plugin ha sido traducido a múltiples idiomas y de manera oficial tiene tres tres idiomas bueno el español inglés y el otro no me acuerdo ahorita pero de manera oficial también en repositorio warpes tiene tres traducciones oficiales y no oficiales también que me han facilitado que yo puse a disposición en el plugin como mencionaba antes la traducción a francés fue también súper emocionante cuando me contactó una persona y me dice el plugin me gustó y lo tradujes y gusta lo puede lo puede ofrecer y claro ahí está disponible también para el público francés y y les digo muchas muchas soportes he dado al respecto pero siempre de la mano pensar de que los problemas los soportes deben ser de manera general de errores generales problemas generales compatibilidad generales incompatibilidad generales ya cuando son cosas más específicas pues lo ideal es contactar entonces a la persona darle un seguimiento porque también eso habla muy bien de lo que es el va a hablar muy bien de lo que es el plugin y lo que es el desarrollador lo pienso yo y pues es este es muy buena una opción también de manera laboral y profesionalmente como mencionaba también los casos anteriores es los el desarrollo plugins a mi experiencia me ha permitido conectarme al mundo e dar soportes en muchas partes del mundo y y warpes también en la comunidad de warpen me ha permitido también expandir ese conocimiento ya sean los en los workahm los meetup que me gusta me gusta colaborar tal vez no no tan frecuente como como quisiera porque no no he podido pero pero sí sí me gusta colaborar pero también este año fue algo impactante y cuando me me escriben me escriben ofreciéndome una una opción de una empresa de alvania me escribe porque ellos ellos se encargan de hacer reviews de plugins escribir blogs sobre artículos sobre sobre plugins y en diferentes áreas y me contactaron para para hablar del plugin wc pick up store porque les había llamado la atención entonces me ofrecieron una opción de del partnership y hablaron de mi plugin pueden encontrar wp club si gusten también eso fue pienso que parte de algo muy muy emocionante muy importante ver el alcance que ha tenido que ha tenido este plugin y ver lo que empezó un proyecto como todos proyecto empañales que empezó casi aquí global poquito y y ahora están de alcanzado ver las conexiones las instalaciones que tiene ese plugin siempre me llenan de emoción porque ver todo ese trabajo y todas las puertas que me abierto tanto de manera local como internacional opciones de trabajo siempre van a ver siempre y yo lo veo así los plugins me han abierto muchas puertas al respecto qué hay entonces más allá de lo que ha sido mi experiencia lo que entonces yo les puedo les puedo recomendar mis consejos al respecto ya por como se dice popularmente por donde no pasar entonces actualmente yo les puedo dar dos dos consejos dos consejos generales uno va muy enfocado en lo que son buenas prácticas buenas prácticas de desarrollo de un plugin y qué incluye lo que son buenas prácticas yo les puedo mencionar que la estructura de código es una muy buena práctica y uno puede como les dije anteriormente puede hacer estructuras personalizadas yo subo subo archivos pero si no los ordeno no es que me va a afectar el plugin me va a afectar la visualización o la lectura de eso del plugin de los archivos documentar documentar personalmente como desarrollador a veces es estedioso o es es aburrido pero es importante también no sólo para quien va a usar el plugin sino hasta para uno dado que si uno descontinúa tiene mucho tiempo sin sin ver un código y no está documentado pues va a tener que leerlo para entenderlo y esa es otra muy buena práctica que que les voy a mencionar tabular siempre el código tabular y hacer hacerlo que sea de lectura fácil porque pasa por uno uno se encuentra un código y y lo primero que tiene que hacer es leerlo como desarrollador pero si el código no está bien estructurado no está tabulado estedioso estedioso y tal vez nos va a atrasar en la comprensión de la funcionalidad del plugin entonces es muy importante siempre tabular y ahora los los editores de código nos dan muchas facilidades para hacer esas esas tabulaciones de todo nos dan facilidades también otra otra buena práctica es dejar nuestros nuestros plugins extendibles a las a las bajo los parámetros de de warpers aquí por ejemplo entra muy muy de la mano el concepto de actions y filters no lo sabrá qué porque es muy amplio pero en resumen les les puedo decir que un action y un filter son hoops lo que se llaman hoops en en warpers y el action es que lo que nos va a permitir es dejar dejar abierta la opción de que se pueda extender que se yo yo dejo un action para que en la parte superior de la vista de mi plugin agregue un mensaje y un filter es para sobrescribir entonces que se yo ese yo puse un mensaje pero tal vez ese mensaje yo lo puse con una con orientado por ejemplo por por mencionar un ejemplo orientado a a verduleros pero si viene un carnicero y dice no es que yo no quiero vender venduras entonces él puede usar ese filter para cambiar ese mensaje orientado a su área carnicería entonces es muy importante no siempre dejarlo como dice hice popularmente con con datos quemados eso es es muy mala práctica siempre dejarlo todo administrable las configuraciones los mensajes pero a veces si son muchos mensajes pues no nos va a ser muy una administración muy fuera de control entonces ahí es donde entra esto de los filters que nos puede ayudar para que entonces un desarrollador pueda extender ese plugin y por medio de los filters cambiar los mensajes cambiar variables etcétera sin dejar de la mano que nos vaya a dejarlo muy abierto en cierta área donde nos pueda querer el plugin y otra muy buena práctica y esto es un concepto que sí lo lo traigo muy de la mano desde que estuve en la universidad y es el dry don't repeat yourself esto no aplica sin si no aplica solo al área de código aplica en general a muchas áreas lo veo yo y en el área vita de los plugins por mencionarlo no hay que repetirnos siempre hay que optimizar tareas hay que optimizar código una regla srs si son dos estilos muy similares pues hacer una clase unificada que entonces nos podemos usar esa clase en dos áreas una sección de código no escribirla dos veces escribirla una vez y extenderla líneas de código siempre va a ser entonces y veo dos líneas muy parecidas hacer una función que unifique ese código pero siempre muy importante por qué porque entonces va a habitarnos que el código sea muy extenso las los html las plantillas que todo sea súper extenso y nos va entonces a igual a mejorar la lectura del mismo código y bueno ya para concluir de nuevo este ha sido un poco de mi recorrido lo que le quise compartir con la comunidad siempre de mi lado está me gusta lo que es compartir y adquirir nuevo nuevo conocimiento y realmente personalmente siento que warpers y la comunidad de warpers es el lugar adecuado para para eso así que de antemano o les agradezco la atención muchas gracias y pura vida