 Me llamo Rocío Valdivia, trabajo en Mekus, somos del equipo de organización de la Workham, bienvenidos a todos, y voy a dar un taller de Plains. Cuando digo taller, en principio estaba ideado para que fuera mucho más largo y se daban muchas más cosas, pero debido al tiempo ya que hemos querido meter a todo el mundo el domingo para dar cosas técnicas voy a hacerla más sencillita y más rápida, ¿vale? Antes de empezar la charra quiero saber cuántos de vosotros habéis instalado un Plain en WordPress, que levanta la mano, es casi todo, ¿vale? Y ahora cuántos de vosotros habéis programado, habéis hecho alguna vez un Plain, habéis modificado o habéis tocado un Plain para modificarlo, el código. Y cuánto de vosotros habéis hecho un Plain desde cero, cinco, bien. Bueno, pues hoy vamos a aprender precisamente eso, vamos a ver cómo se hace un Plain. Muchas veces modificamos más códigos, hacemos cosas en nuestro tema, lo metemos en el funcio en PHP y no nos animamos a hacerlo como Plagging, muchas veces por vaeza, porque no sabemos cómo es, pues no ponernos a buscar. Cuando en realidad tener un Plagging en repositorio es un orgullo. Y cuanto más orgullo y cuanto más Plagging tengamos en el repositorio, en una comunidad como WordPress donde la meritocracia es tan importante, es bastante importante total. Vamos a ver cómo se hace hoy y si os fijáis, hay dos conceptos básicos que hay que entender y una vez que entendáis eso, podréis empezar a hacer vuestro plan. A partir de hoy espero que salga algún Plagging de aquí. ¿Qué es un Plagging y para qué sirve? Ahí he puesto la definición de la Wikipedia, pero bueno, un Plagging, todos lo sabréis, es una pequeña extensión de código para ampliar funcionalidades en nuestro código. Como todos sabéis WordPress trae una serie de funcionalidades básicas por defecto y cuando instalamos un WordPress pues lo que hacemos es que instalamos una ampliación para que haga cualquier cosa. Puede ser un Plagging para hacer una tienda online, puede ser un Plagging para SEO para mejorar el posicionamiento en Google, pueden ser encuestas, etcétera. Hay Plagging para todos, literalmente para todos. Y a veces nosotros tenemos ideas, tenemos ganas de hacer algo, pero no nos animamos. Vamos a echar los mitazos. Vamos a empezar echando los mitazos al Plagging más sencillo que hay, es Hello Dolly. ¿Qué hace Hello Dolly? Ese es el código de Hello Dolly, eso es un Plagging y eso son las líneas de código de ese Plagging. Hello Dolly es un Plagging hecho por Matt Mülemmer, el creador de Wordpress, el dueño automático, la empresa que gestiona Fundación Wordpress, es el creador de Wordpress. Y este Plagging en realidad hace una tontería, lo que hace es que muestra una serie de líneas de una canción en el panel de administración y vos lo decís que es Plagging más idiota. Ese Plagging se hizo para que la gente lo usara como ejemplo. Es decir, el día que vosotros queráis hacer vuestro propio Plagging, la idea es que te descargues ese Plagging, descargues el código y a partir de ahí cogerás las ideas para modificarlo y crear el tuyo. Prácticamente es para eso. Es un Plagging de ejemplo. Lo que necesitamos para hacer nuestro primer Plagging, nuestro primer Plagging, bueno, para cocer cualquier Plagging lo que necesitamos es un editor de textos, puede ser cualquiera, es decir, desde el básico de Windows o de Mac o a uno más sofisticado como un Coda, etcétera, un cliente FTP para poder subir y bajar los archivos y los directorios al FTP de nuestro servidor, un navegador, evidentemente, y uno está haciendo Wordpress. El Fiber lo he puesto como opcional, pero en realidad no hace falta. Lo que necesitamos, qué es lo que es básico si queremos hacer cosas más complejas y queremos y queremos y queremos meter la caña y empezar a hacer cosas guay. La documentación en el Códix está todo. Yo trabajo con el Códix abierto todos los días. Es algo que parece a lo mejor muy básico y es una tundería y tal, pero hay que decirlo. En el Códix están todas las funciones del Códix, en Wordpress Códix tenemos todas las funciones, las definiciones, ejemplos y tenemos un montón de información y de documentación de Wordpress. Y ahora, por otro lado, os he puesto dos enlaces más, que son el enlace también del Códix, ¿vale? Alguien todo el mundo sabe lo que es el Códix, los que sepáis lo que es el Códix. Para los que no lo sepáis, el Códix es la página oficial de Wordpress con la documentación de todas las funciones. Ahí dentro tenéis toda la documentación en esos enlaces. Colgaré la presentación luego más tarde. Bueno, pues en esos otros dos enlaces tenemos la documentación de los ganchos. Ahora explicaremos más adelante lo que significan y para qué funcionan, ¿vale? Es imprescindible para empezar a hacer vuestros plugins. Esos tres enlaces. ¿Qué vamos a hacer? Pues vamos a hacer eso. Vamos a hacer que un plugin nuestro parezca en nuestra página de plugins y podamos activarlo, desactivarlo con nuestra información, con nuestro nombre y a centenas de orgullosos, ¿vale? El ejemplo es muy sencillo. He puesto un ejemplo de un plugin que es una tontería, pero la idea es no lo que hace, sino cómo se hace. Este plugin lo que hace es que lo que he hecho en el plugin de ejemplo es que al final de todos nuestros posts, de todos nuestros artículos, aparezca una imagen. En este caso es una imagen con mi perfil, mi foto y mi perfil de Twitter. En este caso es un ejemplo, podría ser a lo mejor un banner de publicidad porque tienes una tienda y quieres que después de cada artículo salga un banner de publicidad. Y cuando digo eso podría ser cualquier otra cosa. ¿Dónde vamos a trabajar? Vamos a llámanos a la obra, ¿vale? Lo que tenéis a mano izquierda es la estructura de directorios de un WordPress. Si os fijáis tenemos el WP Admin, en ese directorio están todos los archivos del panel de administración. Y en WP Content, que es el importante, es donde vamos a entrar y donde va a estar nuestro código. Si nos vamos a la derecha, en WP Content tenemos languages donde se meten los archivos de idioma, plugins, themes, upgrade and loads. En themes como ya sabemos están todos nuestros temas y in plugins es donde están nuestros plugins instalados de WordPress. Pues ahí es donde tenemos que meter no. In plugins. Esto es un ejemplo de mi directorio plugin de mi blog que utilizo de pruebas muchas veces. Y pues nada, vamos a mano a la obra. Vamos a crear nuestro primer plugin. Yo lo he llamado Work on Sevilla 2012, está ahí abajo del todo. Lo primero que tenemos que hacer es crear el directorio con el nombre de nuestro plugin. Y a continuación creamos nuestro archivo PHP con el mismo nombre. El protocolo que hay que seguir y el que te recomienda WordPress, que hay una serie de pasos para hacerlo y en la documentación lo veréis, es que todos los plugins también tengan su readme.txt para que expliques qué hace, cómo se hace, etcétera. Pero en el ejemplo que vamos a hacer está sencillo que no nos vamos a poner a meterle documentación. Pero total, creamos nuestro directorio, creamos nuestro archivo con el mismo nombre.php y aquí lo tenemos. De momento tenemos un archivo vacío. Y ahora lo que hay que hacer es pegar ese código. Ese código viene en el... Ese código lo que estamos haciendo es darle nombre a nuestro plugin y darle la información básica. Si os fijáis pone plugin name, Work on Sevilla 2012, la URL del plugin, descripción, versión, autor, autoruri y license. ¿Por qué pongo un model de WordPress y no puesto rociobaldivia? Porque mi usuario de Workpress.org es un bajo de WordPress y yo quiero que en mi perfil de Workpress.org aparezcan mis plugins. Yo ahí no tengo que poner mi nombre, tengo que poner mi usuario de Workpress.org. Y es una forma de que después en tu profile, en tu perfil de Workpress.org aparezcan todas las cosas que has hecho. Igual que aparecen, cada vez que comentas en foros y todo eso, la gente pueda ver qué haces. Entonces es importante que, aunque sea un detalle tonto, pero es importante que no se olvide. Con ese código, copiando y pegando de la página oficial y sustituyendo por nuestro nombre y por el nombre de vuestro plugin y por vuestro nombre, ya tenéis vuestro plugin. No hace nada, es un plugin vacío, no hace nada, pero solo grabando ese archivo, si os vais al panel de administración a plugins, os aparece ya vuestro primer plugin. Vamos a crear una función sencillita. Function, lo he llamado wpcsef, insertar imagen. Bueno, el nombre al final no inserta imagen, dice hola, pero bueno, si os fijáis, esta función, si os fijáis en las iniciales del inicio, pone wcsef guion bajo. Hay ciertos protocolos a la hora de crear código que se recomiendan y que yo también recomiendo. Por ejemplo, cada vez que tú creas un plugin, todas las funciones que están en ese plugin se recomiendan que lleven las iniciales de tu plugin delante y después la descripción de lo que hace la función. ¿Por qué? Porque tú imagínate que tú tienes que ir a hacer un getPost, por ejemplo. Pero WordPress ya tiene una función que hace getPost y si habéis programado un poquito, sabéis que si hay todas funciones con el mismo nombre, todo PETA, y la instalación se va a la porra y tienes que desconectar el plugin. Entonces lo que se hace es que se recomienda que pongan las iniciales de tu plugin, todas las funciones de tu plugin tengan las iniciales guion bajo y después la descripción de la función. Son tonterías, pero si seguimos ese tipo de protocolo y todo lo mismo lo hacemos igual y se crean un standard, el código será siempre mucho más legible, será muchísimo más fácil mantenerlo, etcétera. Es decir, son pequeñas tonterías, pero está bastante bien seguirlas. Bueno, creamos una función. Si os fijáis lo que tiene es un echo, va a imprimir un hola-worker. ¿Vale? Grabamos. Esto no hace nada. ¿Dónde hace él? Y es decir, nos ponemos a mirar por la web y ¿qué hacen? Yo le he dicho que imprima hola, pero yo no veo la web en el front-end en ningún lado. ¿Qué es lo que ocurre? Los plugins, cuando tú creas una función, si la función es llamada en ningún sitio, la función no se ejecuta. Nosotros hemos creado una función, le hemos dicho imprima hola, pero si no la llamamos, no va a imprimirlo en ningún sitio. Y ahí está el secreto de los plugins. Vamos a explicar dos conceptos básicos. Con esos dos conceptos básicos, para el que no lo sepa, podréis ser capaces de crear cualquier plugin. Teniendo claro esos dos conceptos. Voy a explicar lo que son los ganchos. Los hooks. Los hooks han sido creados, voy a leer, aunque no se debe, pero voy a leerlo para decirlo más exacto. Los hooks han sido creados para permitir a los plugins engancharse al núcleo de WordPress. Es decir, tú decides cuándo o dónde se ejecutará el plugin. ¿Qué significa esto? Nosotros tenemos WordPress, todas las estructuras de WordPress y todas sus funciones. Tenemos definido unos hooks, unos ganchos, por llamarlo de la traducción, donde nosotros son una serie de puntos donde nosotros nos enganchamos. Es decir, en la ejecución, por ejemplo, cuando se llama la función de content, por poner un ejemplo, lo que estamos haciendo es llamar a la base WordPress, llama a la base de datos, se trae el contenido de un post en concreto y lo muestra. Y nos muestra, a lo mejor, el contenido de ese post. Es un punto donde yo puedo con mi plugin engancharme y decir, oye, cuando WordPress llame a esta función, cuando WordPress llama a la función de content, yo voy a engancharme y voy a enganchar mi función y mi función se va a ejecutar en ese momento. Esos son los ganchos. Hay dos tipos de ganchos. ¿Están los actions? ¿Qué son? Los actions son los ganchos que el núcleo de WordPress lanza en puntos específicos de la ejecución. O cuando algún evento específico ocurre a través de la API, tu plugin puede especificar que una o más de sus funciones se han ejecutado en esos puntos. ¿Qué quiero decir con esto? Lo que quiero decir con esto es que los actions, los ganchos de tipo action son ganchos que se lanzan durante la ejecución. Nosotros, durante la ejecución de esa función de WordPress, engancharemos nuestra función. La función que hemos creado en nuestro plugin que dice hola, no solo la podemos enganchar a un punto o a varios puntos. Yo puedo decir que cada vez que WordPress llame al extracto o el content o el título por ejemplo, yo puedo decir cada vez que se llame a la cabecera quiero que se llame a mi función. Esto a lo mejor puede ser un hola como hemos hecho aquí porque es un ejemplo pero también puede ser a lo mejor de estadísticas. Vale. Vamos al segundo tipo. Estos son ejemplos de action hooks. Hay muchísimos y ahí en ese enlace tenéis la lista de todo lo action que tiene el núcleo de WordPress. Como por ejemplo vamos a poner algunos ejemplos los más puestos sencillos como get footer por ejemplo, cada vez que se llama al pie de página de WordPress pues yo puedo enganchar algo. Yo puedo... Es muy sencillo porque al final de cabo lo que estás diciendo está definiendo donde quieres, en qué momento o en qué llamada quieres mostrar llamar a tus funciones. Un plugin puede ser muy sencillo como hemos hecho puede ser muy complejo. Normalmente los plugins complejos usan montones de ganchos tienen que ser ejecutados en diferentes momentos de la ejecución. El siguiente y el segundo tipo de filtro de gancho se llaman filters. Los filters son los ganchos que WordPress lanza para modificar. Aquí está la diferencia con action. ¿Vale? Los actions se llaman en el tiempo de ejecución en un tiempo de ejecución cuando se llama tal función, yo engancho. Pero la diferencia con un filter es que yo lo que hago es que llamo a mi función cuando una función de WordPress se llama y modifico su resultado. Es decir, por ejemplo llamo a la función de content ¿Vale? Y antes de que termine de ejecutarse, antes de que muestre el texto de ese post yo lo modifico. Si por ejemplo me iba a traer y si por ejemplo la llamada a la función de ese post me iba a traer dos párrafos yo puedo decir, y es el caso del ejemplo que vamos a hacer, yo puedo decir que me devuelvas a dos párrafos del post pero además le añada que al final le añada la foto que yo quiero añadirle. Esto es un ejemplo, también puedo modificarlo totalmente puedo pasarlo aquí para que sume caracteres y para que al final, yo puedo decir eso sería con un action o bueno no, con un filter porque puedo hacer que me devuelva todo el texto y añade una línea y diga número de caracteres del post es un ejemplo, si me ocurre sobre la marcha pero para que veáis que la diferencia entre un action y un filter es esa. Un action lo que hace es llamamos en el momento que queremos y enganchamos con el ancho el filter lo que hacemos es enganchamos esa función, modificamos el resultado y mostramos. Ejemplo de filter hooks, ahí tenéis el enlace con todos los ganchos del núcleo de WordPress y son por ejemplo get the stir cuando se llama el extracto de los posts de title por ejemplo cuando se llama el título de un post he puesto los más sencillos para que sea sencillo el concepto, hay ganchos mucho más complejos hay ganchos que se llaman llamadas internas del panel de administración o en momentos que se usa el crón hay ganchos mucho más complejos y ganchos mucho más sencillos, he puesto sencillos para que el ejemplo se entienda más claramente de content, de categorías por ejemplo cuando llamamos a las categorías para mostrarlas es decir, en esos momentos nosotros podemos añadir o quitar lo bueno de este tipo de cosas es sabiendo sabiendo utilizar sabiendo el concepto ya podemos meter quitar o modificar lo que queramos tanto de WordPress como funciona el nuestro sí añadimos nuestra función añadimos el hook a nuestra función, vale si os fijáis lo único que he hecho es la función, el lugar de siola que nos muestra una imagen si os fijáis en el HTML, tiene un P image y una ruta de una foto, vale y qué es lo que he hecho la función he metido en un parámetro que se llama content y le digo que devuelva para los que no se payó un poquito de PHP lo voy a explicar la función lo que hace es que hace devuelve el contenido que se le pasa como variable es decir, el contenido del post y añade una imagen, eso es lo que estoy haciendo estoy cogiendo un post y al final de ese texto de esa cadena de caracteres estoy añadiendo algo que yo quiero estoy modificando estoy modificando el contenido de un post, le estoy añadiendo algo en este caso por eso qué es lo que estoy haciendo utilizo ahora mi gancho utilizo la función añadir un gancho teníamos dos, recordamos los actions y los filters son para añadir o quitar cosas y los filters para modificar funciones concretas de WordPress pues eso es lo que estoy haciendo addfilter, añado el filtro de content hay dos parámetros en la función en addfilter de content y nuestra función qué significa eso significa que cuando se llama cuando WordPress llame a la función de content WordPress antes antes de devolver el valor llamarán nuestra función nuestra función, si os fijáis va a modificar el contenido y luego WordPress devuelve el valor así acabamos de modificar todos los posts de nuestra web con una, dos, tres contra líneas de código contra líneas de código hecho que todos nuestros posts tengan al final la imagen esa podría ser publicidad en este caso alguna foto mía pero son tres líneas de código a partir de esto es un comienzo qué es lo que el post antes de activar nuestro plugin pues antes de atribar el plugin sería título, descripción y las categorías y deja comentarios después de activar nuestro plugin pues todos los posts tendrían esa imagen al final esto es un ejemplo muy tonto, muy sencillo pero la idea es que si habéis entendido lo que son los ganchos si habéis entendido la diferencia entre los ganchos de tipo action y los ganchos de tipo filter sois capaces de hacer cualquier cosa todos ponerse y nada como digo ahí el límite está en nuestra imaginación y todos empezar