 A ver una charla de cómo crear un directorio con WordPress usando campos personalizados, ¿vale? Advance custom fills. ¿Todo lo conocéis? Advance custom fills. ¿Hay alguien que no lo conozca? De aquí. No, vale, no hay manos, entonces entiendo que no. Bueno, pues a ver si hoy más o menos nos hacemos una idea de lo que es. ¿Me oyes bien los del fondo? Sí, vale. Un poco un resumen de las cosas que vamos a ver. Vamos a ver qué es un directorio o el concepto directorio. Es un poco amplio. De hecho, ni Wikipedia lo tiene muy claro lo que es. Vamos a ver casos prácticos que al final es la mejor manera de saber qué es lo que vamos a ver y vamos a ver cómo podemos montar un directorio con WordPress. Y básicamente lo vamos a resumir en crear un custom post type para ese directorio de lo que queramos hacer. Vamos a ver un caso de ejemplo un directorio de coches. Vamos a crear custom taxonomies, vamos a ver advance custom fills, vamos a crear un plugin de funciones o ver un plugin de funciones y cómo aplicamos todo esto con un tema personalizado. ¿Quién soy yo? Yo me llamo Juan Cadíaz, soy programador frontend, programador de lo que se ve, como a mí me gusta decir para que se entienda lo que hago. Y tengo un propio estudio que se llama jvlopia.com donde hacemos temas y plugins a medidas para WordPress. Luego soy organizador tanto de la meetup de WordPress de Tarragona como la de Barcelona y luego hacemos un evento anual en la provincia de Tarragona que se llama TechneForum con los diferentes meetups de tecnología que tenemos allí, pues hacemos un evento anual. Colaboro también en el podcast de Dario Balbontín, Dario F. Lo tenemos un poco abandonado, un poco muerto, pero bueno, algún día puede ser que vuelva. Y aquí tienen las direcciones para poder seguirme. Yo siempre hablan como y charlas con un disclaimer y es un poco para avisar de que lo que vais a ver aquí no es para sentar cátedra, escribir un libro, ni es ciencia cierta, etcétera, etcétera, simplemente es mi experiencia y mi conocimiento y yo lo comparto con vosotros. Seguramente esté equivocado, haya otras maneras de hacerlo, entonces por favor decírmelo o preguntarme porque así además yo también aprendo y crecemos todos que es un poco la idea de estas charlas, ¿vale? Soy responsable de lo que digo, pero no de lo que cada una interpreta, no me responsabilizo si algún código o alguna cosa que veamos va a romper vuestras webs y en caso de duda consultar con vuestro programador. Si nos vamos un poco a la Wikipedia y vemos qué es esto de los directorios, es un poco gracioso porque no encontramos una definición actual por así decirlo, ¿vale? Lo que vemos es lo que Wikipedia o lo que en su día se consideraba directorios web, que era una web donde te listaban otras webs porque como no existían buscadores pues eso es lo que había. Y Wikipedia más o menos lo que nos viene a decir es eso, si nos lo loemos porque no me lo sé de memoria, dice que un directorio web también llamado directorio de enlaces o directorio abierto es un tipo de sitio web que contiene un directorio organizado de datos, imágenes o más generalmente enlaces a otros sitios web. Básicamente ya vemos aquí que lo que vamos a ver es un listado de cosas y hay una serie de datos y una serie de campos que están estandarizados o al menos que, claro, si nosotros necesitamos comparar o buscar para decidir a qué sitio vamos o que no, vamos a necesitar tener la información mínimamente organizada y mínimamente estandarizada. Aquí nos habla de datos, imágenes y enlaces, ¿vale? Y los directorios web, contrariamente a los motores busquedas se caracterizan por estar estructurados en categorías y subcategorías, otro concepto que también veremos, ¿no? Que se suelen categorizar con categorías y subcategorías. Todo esto está muy bien, pero lo que nos interesa es ver un caso práctico o un ejemplo para entender un poco de qué estamos hablando. Un directorio o un comparador o un tipo de web como estas no deja de ser una especie de fotocasa, ¿vale? Fotocasa es una web en la que nosotros entramos, le decimos lo que queremos, pues en este caso el tipo de vivienda que queremos, si queremos comprar o lo que sea, y le damos unos datos, en este caso yo creo que he puesto vivienda piso en Barcelona, me salen un listado de pisos, ya parametrizados con esta búsqueda que he hecho, que al final es lo que me da la categoría, le voy a poner una serie de opciones y me va a ir modificando el resultado de este listado de estas opciones en base a lo que yo le he elegido, ¿vale? Hasta que no tenemos ningún secreto. Pero ya vamos viendo unas cosas en común y es que hay una serie de campos que están estandarizados, es decir, si yo no tengo fotos y yo no tengo precio y yo no tengo un título seguramente en mi listado o no voy a tener relevancio directamente ni voy a salir, por lo tanto toda esa información la tenemos que tener mínimamente estructurada, mínimamente puesta. Y luego además, bueno no me ha dado tiempo de verlo porque estaba hablando, pero hay una vista del listado, es decir, donde salen todos los ítems que vamos a ver y luego una vista individual que es esta que hemos visto aquí de la ficha, ¿vale? Aquí tenemos una web que está hecha en WordPress y este es un caso ejemplar, pues así decirlo, y es que ellos directamente y la mayoría de las imobiliarias ni añaden los datos directamente a su web, sea WordPress o sea cualquier otro CMS. Al menos las imobiliarias, la forma de trabajar que tienen es que tienen un CRM intermedio en el que ellos añaden allí las viviendas que gestionan y en ese CRM marcan dónde van a ir los pisos o los inmobiles que tengan, pues unos van para fotocasa, otros van para idealista, otros van para su web, etcétera, etcétera. Y luego cada servicio de estos son los encargados de ir a consultar a CRM, bajarse los datos y montar el listado. Este wallpaper se hace lo mismo, se conecta cuatro o cinco veces al día y se baja todas las los inmobiles, etcétera, etcétera. Aparte en este caso es particular porque no te monta el directorio con los datos de que se baja de CRM, sino que te los importan base de datos para poderle aplicar mejoras para SEO, que al final es la gracia de tener tu propia web, ¿vale? Si vemos aquí un ejemplo, buscamos un piso, un poco parecido a lo que hemos visto antes, comprar piso Santander, te lo filtra, tienes ahí el filtrado, puedes elegir las opciones y volvemos a lo mismo. Ya vemos que todos tienen foto, tienen un título, tienen un precio, tienen una serie de datos que lo hemos tenido que ir añadiendo de forma parametrizada, porque si no no se podría listar aquí, ¿vale? Y podemos hacer los cambios en los listados, etcétera, etcétera, en función de lo que hagamos cambiando nos va modificando la vista del listado y luego tenemos una vista independiente. Luego además, en este caso, pues que creo que no sé si tengo la conexión internet puesta, oye, un second link, se supone que sí, vale, no sé si se verá bien porque se ve un poco pequeñín, pero aquí tenemos lo mismo pero en la versión de móvil, ¿vale? Lo enseño más que nada por lo curioso que es la adaptación de todo esto a una versión en móvil, ¿vale? Le voy a decir que quiero comprar, bueno, igual casas, no hay tantas que se entendés, le voy a poner piso, ver los resultados. Y aquí lo gracioso o lo interesante a ver es que antes veíamos un filtro que lo teníamos arriba y la versión móvil tenemos que adaptarlo diferente en una ventana modal para poder hacer un poco lo mismo y que sea más fácil de utilizar. Yo aquí hago las diferentes opciones, las diferentes búsquedas y él me va modificando aquí los resultados y cuando le aplico veo lo mismo que veía ahí, lo único que la vista de móvil. Más que nada, lo enseño para que se vea un poco las diferentes formas de trabajar tanto en el desktop como en el móvil, ¿vale? Seguimos con los ejemplos. Luego tenemos el ejemplo, por ejemplo, de WordPress Barcelona, la Meetup de Barcelona, que no deja de ser un directorio también. Tenemos una sección de eventos en los que están listados todos los eventos y las Meetups que hemos ido haciendo, no deja de ser lo mismo. En este caso no tenemos un filtro porque todavía no me ha dado tiempo de implementarlo, pero la idea es que tú puedas filtrar por temática o categoría de las diferentes charlas y puedas ver las charlas relacionadas pues con diseño, con programación, con sé qué, con sé cuánto y es lo mismo. Y luego tenemos una vista independiente cuando vamos a ver una Meetup como tal en la que tenemos toda la información de esa Meetup. Hay otra sección que es la de Ponentes, exactamente lo mismo, tenemos listados toda la gente que ha venido a dar una charla en nuestra Meetup y todas las charlas que ha ido dando, ¿vale? El concepto se entiende, ¿no? El ejemplo que vamos a ver es este de aquí, el directorio de coches. No me ha matado mucho en el diseño, yo tampoco soy diseñador, soy programador. Y básicamente es lo mismo, tenemos un listado de coches en el que en diferentes opciones que elijamos lo que vamos a hacer es filtrar el resultado final para, en base a lo que le vayamos poniendo el filtro, obtener un resultado más aproximado lo que necesitamos. ¿Qué estamos viendo aquí? Que necesitamos tener la información más o menos parametrizada, necesitamos que haya información común para poder comparar, vamos a necesitar una vista de listado y una vista individual de ficha o del ítem como tal, ¿vale? Entonces, en resumidas cuentas las cualidades que tiene que tener un directorio, voy poniendo por aquí. Básicamente, que tengamos la información estructurada, necesitamos unos campos comunes, como hemos dicho, la vista de listado y la vista individual, además tiene que tener una fácil y rápida alimentación de estos datos, es decir, el cliente final o el webmaster final o la persona final que administra la web tiene que ser muy sencillo poder añadir estos datos, porque es que si no, no lo va a hacer. Y lo importante de un directorio es que tenga muchos datos para poder comparar y muchos resultados. Y además, una de las opciones también muy interesantes es la posibilidad de alimentarlo esto de forma desatendida, es decir, hacerlo sin necesidad incluso de poder tener que estar añadiendo cada ítem manualmente, sino que como hemos puesto el ejemplo en la inmobiliaria, que ellos se añadan en un CRM y sea la web nuestra en la que se conecte allí y recoja esos datos. Vale, todo esto está muy bien, pero ¿cómo lo hacemos con WordPress? Pues para poderlo hacer con WordPress necesitamos un custom, o sea, darle alta un custom post type, es decir, un tipo de dato personalizado, sea coches, sea inmuebles, sea lo que sea. Darle de alta categorías personalizadas, pues para filtrar estos inmuebles también teniendo un poco en cuenta el tema del SEO. Por ejemplo, en el ejemplo de coches, pues lo más sensato es hacer una taxonomía de combustible, de tipo de combustible, para poder así tener una categoría que sea 10, el gasolina, el étrico, etcétera, etcétera y además eso seguramente nos ayude a nivel deseo a posicionar por esos conceptos. Y también nos ayuda a que por ejemplo el listado de opciones de coches no sea una locura, porque nos estará mezclando las diferentes combustibles que tampoco tiene mucho interés de cada usuario final que busca, que normalmente el tema de combustible es una de las principales opciones para categorizar un coche u otro, ¿vale? Esto es un poco el sentido común aplicado a lo que nosotros necesitemos. Veremos los tipos de, o sea, necesitaremos que ambos personalizados, necesitaremos un plugin de funciones para recoger todas las diferentes configuraciones y cosas que vayamos haciendo. Vamos a ver también que muchas de estas cosas lo vamos a poder hacer con plugins, pero lo recomendable y lo ideal es hacerlo con un plugin de funciones. Necesitaremos un tema personalizado y en el caso de no tenerlo puede ser que con un tema hijo lo podamos hacer, seguramente le tengamos que tocar parte de código y la jerarquía de plantillas para poder tener un poco una idea de cuáles son esa estructura de plantillas que tenemos que seguir para crear ese archivo del listado y esa vista individual que hemos visto. Y como punta adicional, los filtros los podríamos hacer con un plugin que se llama Facebook WP, que nos ahorra mucho la faena a la hora de hacer los filtros. Vale, pero cuidado, porque muchas veces nos encontramos que toda la información se la estamos añadiendo en la parte del editor. Esta imagen, esta captura que pongo ahora, muchos diréis. Hostia, pero esto que hemos vuelto al pasado o cómo funciona. Esto es lo mismo que esto que vemos aquí, ¿vale? La diferencia es que aquí no lo tenemos interpretado y es HTML y lo que vemos aquí son bloques que son más bonitos y no lo pinta de otra manera, pero el problema lo tenemos igual. Es decir, no tenemos una arquitectura de la información, no hay una unidad mínima de información. Es decir, todo lo que hay ahí es toda la información que tenemos. Yo no puedo decirle, llámame al campo de contenido y sácame solo la imagen. Sí, lo podría llegar a hacer, pero tendría que hacerme unas funciones y un churro de código para sacar una imagen que no tiene sentido. Por lo tanto, tenemos que tener muy en cuenta que el editor nunca puede ser la unidad mínima de información. Yo tengo que crearme unos campos y tengo que encontrar una manera de poder abstraer esa información para poder luego jugar con ella y poder utilizarla, porque si la meto toda en el editor, voy a tener un problema. Necesitamos estructurar los datos. Lo ideal es evitar independencias innecesarias. Aquí, por ejemplo, vemos la tabla comparativa en el que pone marca, combustible, etcétera, etcétera. Esto, ahora, Gutenberg ya lo trae de base, pero hasta no hace mucho, no teníamos una manera de añadir tablas en WordPress. Teníamos que ir a un plugin externo que nos ayudara a hacer las tablas, etcétera, etcétera. Si un día ese plugin desaparecía o lo que sea, perdíamos todas las tablas. En el caso de las tablas, se añadía con un shortcode dentro del editor. Si yo el día de mañana quiero cambiar el diseño de esas tablas, a no ser que toque una parte de diseño que sea común de todas las tablas, no lo voy a poder cambiar o cambiarlo, iba a ser un drama, etcétera, etcétera. Hacer una tabla, o sea, es que es una cosa tan sencilla como eso y he recurrido a un plugin externo que luego me va a crear una pesadilla, ahora de evolucionar. También lo ideal es que podamos llevar nuestro este contenido en un CSV. Imaginar que hemos añadido, por ejemplo, en el caso de los inmuebles, 500 inmuebles y tengo que hacer un cambio masivo en todos de algo. Imaginar tener que ir uno por uno a cambiarlo. Me descargo en un CSV, modifico lo que necesite, actualizo, lo vuelvo a subir a la web y se me actualiza toda la información del directorio porque como tengo toda la información extraída en diferentes campos, diferentes secciones, me va a ser mucho más sencillo. Y además, si lo hago de esta manera, voy a poder independizar los layouts y extender la funcionalidad, porque si yo los campos los tengo separados, a día de hoy, por ejemplo, no me ha dado tiempo de hacerle un marcado semántico de esquema para que Google me pueda indexar mejor la web. Bueno, no pasa nada, de aquí tres meses cuando tenga tiempo, lo reviso, aplico el marcado y una vez lo aplique, me va a aplicar ese marcado a todos los ítems que tenga yo en mi directorio, en mi listado de la web. Si lo hiciera de esa manera, tendría que ir uno a uno, hacerlo. He puesto el marcado al esquema, pero podría ser una cosa tan tonta como, ostras, me he dado cuenta que la galería de imágenes no se ve bien en el móvil, pues si lo tuviera de esta manera, igual tendría que ir uno a uno a modificarlo. De la otra manera, si trabajo con layouts y con archivos de plantilla, con que lo modifique en un sitio, me lo va a cambiar en toda la web. ¿Vale? El concepto se entiende, más o menos. Si traemos los datos, si tenemos los datos extraídos, tenemos los datos de forma interoperable, es decir, podemos hacer una estructura de datos como estamos viendo aquí. Yo tengo una tabla de Excel, mal llamada, una tabla de Excel, vamos a poner. En el que tengo un título con los coches, una columna de marca, una columna de combustible, una columna del tipo del coche, modelo, etcétera, etcétera. Yo me he bajado este listado, yo puedo modificarlo y una vez lo actualice, lo puedo subir a la web y se me actualizará todo. Porque cada campo de esto lo tengo independizado. Nos vamos a extraer del diseño, es decir, como yo tengo los datos extraídos del diseño, hoy utilizo un diseño, mañana utilizo otro, mañana le cambio el marcado, mañana le mejoro una sección, etcétera, etcétera. Bueno, podemos hacer actualizaciones masivas, podemos hacer actualizaciones externas, porque si yo consigo replicar o interpretar un CSV o una fuente de datos de una fuente externa, me lo voy a poder llevar a mi web y voy a poder hacer también ese listado, manteniendo mi diseño, etcétera, etcétera. Y además nos vamos a tener una dependencia, ¿vale? Vale, pero dime como podemos hacer todo esto. El primer punto, Custom Post Type. ¿Quién conoce los Custom Post Types de aquí? Levanta en la mano. Vale, el Custom Post Type es esto que veis ahí de coches, no sé si se verá con Zoom aquí. Vale, pues esto que veis aquí arriba de coches básicamente es que hemos creado un tipo de contenido personalizado para que el listado de nuestros coches no esté ni en páginas ni en entradas, normalmente tenemos con WordPress por defecto. Entonces, yo he creado un Custom Post Type, que es un tipo de dato personalizado en el que le he dicho que se va a llamar coches y ahí voy a almacenar todos los coches. En este tipo de campo personalizado lo podemos basar tanto en páginas como en Post, ¿vale? O sea, que sea contenido estático, sea contenido dinámico, esto es algo que necesitaríamos una charla solo para ver estas diferencias, ¿vale? Porque parece muy fácil, pero luego cuando te pones y luego para poder informarnos un poco de esto tenemos tanto el Codex, que es el web de WordPress donde nos enseñan cómo poder hacer todo esto por código, y luego tenemos la ventaja de que hay plugins como Custom Post Type UE que nos ayudan a crear estos tipos de campos personalizados o un generate IWP, que es una web que nos da el código para poder hacer todo esto. Vale, pero vamos a verlo. Esta zona es un poco aburrida así, porque voy a ir saltando de ver cosas a... Vale. Yo tengo aquí mi web y... Vale, dado de baja, perfecto. Tengo instalado aquí el Custom Post Type UE que es el plugin que os comentaba y yo aquí le puedo dar de alta un tipo de contenido personalizado. Le voy a poner motos porque si le digo coches ya lo tengo y me voy a tener problemas. Me dice que le pongo la etiqueta en plural, le dice que me pongo la etiqueta en singular y le voy a decir que me rellenen las etiquetas adicionales con estas primeras que yo le he puesto. Si vamos para abajo, vemos que me añade los diferentes campos. Aquí me va a tocarlo porque voy a tener palabras en singular y en plural que a veces no están muy bien elegidas, pero bueno, con esto ya puedo arrancar. ¿Qué me va a hacer esto? Voy a crear todo el código que yo necesito para dar de alta ese tipo de contenido personalizado. La ventaja que tiene este plugin es que yo luego puedo extraer el código que me genera para montar este tipo de dato y lo puedo incorporar en mi plugin de funciones y puedo desinstalar este plugin y así yo tengo todo el código en mi plugin sin necesidad de un plugin como este que al final lo que hace es almacenar la información de los datos y me va a ralentizar la web. Tampoco es una locura lo que ralentiza, pero bueno, si intentamos hacer las cosas bien, pues las hacemos de un inicio y ya está. Yo aquí ya lo he dado de alta y vemos aquí que tengo mi motos, como digo, igual está mal elegido el nombre, pero si volvemos otra vez aquí al plugin, le decimos editar el tipo contenido, buscamos motos y creo que es... Aquí y le decimos motos, guardamos y ves que aquí ya tenemos motos, ¿vale? Seguimos. Siguiente punto, las categorías personalizadas, las custom taxonomies. El mismo concepto que acabamos de ver de campos personalizados, pero en categorías. ¿Qué nos va a permitir hacer esto? Ahí no se ve, pero se ve muy pequeño, que tanto marcas como combustibles que son categorías, custom taxonomies. Entonces, yo puedo basarlas tanto en las categorías que van a ser jerárquicas, yo puedo hacer una categoría padre, una categoría hija, o como etiquetas que no son jerárquicas. A mí esto también me gusta relacionarlo un poco con SEO y poner el ejemplo que las categorías con jerarquía, o sea, las que son basadas en categoría, son más susceptibles de utilizarla para SEO para posicionar y las que son como etiquetas, nos van a servir más para opciones de filtrado, opciones de etiquetar el contenido, y no tanto para posicionar. Dijeremos que las categorías serían más generalistas y las etiquetas un poco más, como ítems más pequeños, que nos pueden ayudar a relacionar un contenido con otro, pero no tienen que ser exactamente lo mismo. Igual está un poco mal explicado, pero para que nos entendamos. Aquí tenemos lo mismo, tenemos tanto el codex de WordPress, que nos publica cómo hacerlo, como el custom post API UI, que es el plugin que hemos visto, que nos hace exactamente lo mismo. Nos deja dar de alta los tipos de contenido personalizado, como los tipos de taxonomías personalizadas. Y luego la web de generate UWP, que nos hace lo mismo, lo único que con un lenguaje un poco más técnico y nos genera el código para hacer esto. Vamos a verlo. Si nos venimos aquí, le voy a decir que voy a añadir o editar taxonomías, lo que hemos visto antes son los tipos de contenido y las taxonomías. Le vamos a poner, no sé qué ponerle para motos, porque, a ver, le voy a poner tipo de cambio moto, porque si le pongo cambio me va a fastidiar con el otro. Ah, mira, cilindrada, muy bien. Aquí etiqueta plural sería cilindradas, que mal suena. Aquí la ventaja que además tiene es que me permite asociar este tipo de taxonomía personalizada a un tipo de contenido personalizado, porque yo no quiero estar dando de alta una página o una entrada del blog y que me diga que cilindrada tiene esta entrada del blog, no tiene sentido. Pues que solo me lo asocie con motos. Si yo lo guardo, cuando me venga aquí a motos, vemos que ahora tenemos una sección de cilindrada. Yo puedo añadir aquí las diferentes cilindradas que yo creo que van a tener mis motos y las tengo para elegir cuando de alta una moto. Si la tengo de alta, como es una categoría o en etiqueta, cuando estamos dando de alta una moto, aquí las podría crear. Aquí puedo elegirlas que hay o, si no, le puedo decir 125. Y si no hay, me la va a dejar crear. Y yo cuando publique esto y me vaya aquí a mis cilindradas, tengo la de 125 creada y tengo la Yamaha que he dado de alta creada. Voy un poco rápido porque son muchos conceptos y si me queda a media, si no se ve el resultado final, me vais a odiar más de lo que me veais ahora. Seguimos. Advance custom fills. La herramienta mágica que nos va a permitir hacer toda la parte de los campos personalizados. La conocéis los de aquí, la Advance custom fills. A ver, Advance custom fill nos da 38 tipos de campos personalizados para poder crear colecciones o grupos de campos que vayamos a utilizar en nuestro contenido. La ventaja que nos da esto, aparte de que nos ayuda mucho a dar de alta los diferentes campos, porque todo esto lo podemos hacer nativo con Warp Press. ¿Qué pasa? Que cuando se complica los diferentes tipos de campos que vamos a dar de alta, etcétera, etcétera, pues el nivel de exigencia, la hora de programar esos campos es bastante alto y además que llegar a la experiencia de usuario que nos da Advance custom fills de base, Warp Press al menos de forma nativa no lo hace. Tendríamos que recurrir alguna librería o alguna historia que nos haga un poco más amigable la forma de añadir los datos, etcétera, etcétera, y al final con esto nos va a hacer lo mismo y vamos a tener las mismas dependencias, etcétera, etcétera, por lo tanto creo que es una buena herramienta que nos puede ayudar. Aparte de los tipos de campos que podemos añadir, esto es un poco al de cara nuestra de cada de los desarrolladores, pero para el cliente final o la persona que va a utilizar la web va a tener una estandarización de los datos de entrada, es decir, él tiene unos campos, él tiene unas opciones, él añade lo que tenga que añadir allí y incluso nosotros le podemos configurar control de esos datos, es decir, aquí solo ponme números, aquí solo ponme letras, aquí solo puedes elegir una categoría, aquí solo puedes añadir una tipología de imágenes o un fichero que sea PDF, etcétera, etcétera, es decir, podemos ponerle una serie de controles para garantizar la integridad de los datos que se están añadiendo a ese tipo de contenido. Nos permite estructurar los datos, nos da una libertad asociación, yo puedo crear un grupo de campos solo para páginas, un grupo de campos solo para entradas, un grupo de campos solo para los coches, otro solo para las motos, etcétera, etcétera. Le podemos añadir lógica condicional, es decir, si más, por ejemplo, en el caso de los coches, si le digo que es, por ejemplo, le puedo decir, si le elijo que el coche es híbrido, que me pregunte si es híbrido enchufable o híbrido, híbrido autorecargable, pues podría preguntarte eso en base a lo que le hayas elegido el tipo de combustible. Si le dices que es diesel o gasolina, no te va a preguntar esto porque no tiene sentido, ¿vale? Además, una cosa que tiene buena AppDance and Custom Filters es que extiende la funcionalidad nativa de los campos personalizados porque esto ya viene con WordPress de base. Lo que pasa es que si los vemos nos morimos de risa porque es una caja en el que podemos añadir campos personalizados pero de campos y de personalizados creo que tienen poco, pero bueno, en su día funcionó, ¿vale? Y luego aparte, otra de las opciones que tenemos es que podemos añadir páginas de opciones utilizando los campos personalizados. Es decir, los campos personalizados, por lo general, van asociados a un tipo de contenido, pues me va a preguntar si lo quiero asociar con coches, con páginas, con entradas, con lo que sea, pero yo puedo crear una página de opciones que me lo va a guardar en la tabla de Options de WordPress y yo puedo recurrir a esa información en cualquier punto de la web y vosotros diréis, ¿y esto para qué me sirve? Pues si yo pongo un directorio, voy a tener una página de archivo con toda mi información. Ahí le puedo establecer un título, si es un H1, un H2, un H3, le puedo poner una descripción y le puedo poner una serie de opciones que si no, es una de las pegas que tienen la parte de los Custom Postage in WordPress que o lo pones a fuego en la plantilla o no puedes editar esa información pues yo me puedo crear unos campos de opciones con Advanced Custom Fields y poder tener todo esto. Esto sería una imagen de cómo se verían los campos personalizados dentro de un tipo de contenido de coches y lo vamos a ver directamente. Vamos a venir aquí, por ejemplo, si yo desactivo el plugin de Custom Postage Vuey, a mí ya me han desaparecido las motos. Al menos me ha desaparecido la declaración del tipo de contenido de las motos porque si yo vuelvo a activar este plugin, me vuelven a aparecer aquí las motos. Esto lo digo para que tengáis en cuenta que una cosa es la parte de código que nosotros instanciamos en nuestra web para que se cree este tipo de contenido personalizado como son las motos y lo que hay en base de datos, ya existe. Por lo tanto, por mucho que nosotros desactivemos esto, en nuestra base de datos va a seguir habiendo campos que tengan el nombre de motos, por lo tanto que si, por mucho que desactivemos el plugin de Custom Postage Vuey, si lo tenemos en nuestra base de datos va a aparecer en el momento que volvamos a instanciar este tipo de contenido. Desactivo por aquí, le activo el plugin que tengo yo de coches, que es este de aquí y ya tengo todos mis coches aquí listados. Si entro a alguno de ellos vemos que cambia mucho de lo que podría haber de una entrada de WordPress normal. Es decir, fuera de esta parte de aquí arriba, que incluso yo la tengo tuneada y es decir que a mí me siempre me pone el extracto justo debajo del título, porque creo que tiene más sentido que sea así. Aquí tenemos toda la parte de contenido, he deshabilitado incluso el editor de contenido para este tipo de contenido personalizado de coches y directamente aquí le pido las cosas. Dime la marca que vas a seleccionar esto es un tipo de taxonomía personalizada de las marcas, pues yo la elijo por aquí y no, marcas es la peor ejemplo de todos, Fort. Aquí lo mismo, si es DS Logo Solina, si quisiera añadir un eléctrico con dar la de alta aquí, le crearía ya directamente la categoría de eléctricos y lo tendría listo aquí para seleccionar para otra persona que estuviera añadiendo contenido. Si el tipo de coches compactos se dan a Berlina, el tipo de cambio, el año, el modelo, los caballos, aquí hay una ficha en PDF, el precio, aquí la imagen destacada que estoy, es un campo nativo de WordPress. Los contenidos, pues si añadiríamos un vídeo de YouTube o lo que fuera, texto, aquí tengo un campo de repetición en el que yo puedo ir añadiendo enlaces de interés de forma iterativa, es decir, puedo añadirle todos los que yo quiera, le puedo relacionar con otros coches y una galería de imágenes, ¿vale? Como he creado todo esto, aquí en campos personalizados tengo datos técnicos del coche y aquí hay todos estos campos personalizados que son los que me hacen lo que acabo de ver, ¿vale? Si, por ejemplo, nos vamos a ver la ficha técnica, voy a abrir uno de aquí, así lo veremos más claro, ¿vale? Vemos aquí que tenemos la ficha técnica con diferentes pestañas y son las que tengo aquí creadas, ficha técnica es una pestaña, si sigo bajando por aquí tenemos contenidos que es otra pestaña, etcétera, ¿vale? Los tengo organizados en los diferentes campos personalizados en pestañas y luego cada uno de estos, pues, por ejemplo, la marca, hemos visto que es una taxonomía, pues es un tipo de campo que es taxonomía, tengo todos estos para elegir, ¿vale? Y en función de lo que yo vaya necesitando voy a ir dando de alta estos tipos de campos personalizados que los voy a asociar en la parte inferior de aquí a muéstrame este grupo de campos si el contenido es igual a coche, si es igual a coche me van a salir los campos personalizados. Si yo doy de alta una página, no voy a tener los campos personalizados, simplemente me va a salir la forma de entrada normal de WordPress, ¿vale? Vamos a seguir, que si no me da tiempo a acabar. Luego tenemos un plugin propio de funcionalidades donde nosotros vamos a tener declarados todos los custom post type, declarados todas las taxonomías, los campos personalizados y las funciones que necesitemos. Para de esta forma, tener controlado todo este información técnica, vamos a decirlo, la parte más técnica de nuestro directorio en un plugin separado del resto de cosas, porque si el día de mañana quiero darlo de baja, quiero modificarlo, quiero hacer cualquier cosa con él, tenerlo focalizado en un sitio y no tenerlo desperdigado, como muchas veces ocurre, que si buscamos información por internet y demás, se ponlo en el Functions de tu tema. El día que cambias de tema, en el Functions tienes la biblia escrita y no sabes qué cosa hace referencia a los coches, a dar motos, etcétera, etcétera, y luego ordenar eso es un Cristo. Y ya nos digo, si estáis heredando el trabajo de otro y tenéis que meter mano ahí, ¿vale? Porque si nos tenemos que enfrentar a nuestros demonios de hace 5 años, todavía hay un poco de tolerancia, pero si los demonios son de otros, no hay tanta tolerancia. Vale. Si revisamos, por ejemplo, aquí, pensar que tenía esto abierto, un segundito, vale, aquí tengo un instalación de WordPress que es la que estamos viendo, si yo me voy a plugins, yo tengo aquí un plugin que se llama JBLopiaCochestpt y si nos vamos a la raíz de éste, vemos que aquí lo que tengo es declarar las diferentes cosas que necesito. Tengo un fichero, estoy llamando un fichero en PHP que es CochesCustomPostType, que si nos venimos aquí... Aquí tengo declarado lo que hemos visto. Con el plugin que hemos visto el CPT UI, que nos lo hacía de una forma visual, realmente es esto lo que nos está haciendo, es decir, nos está añadiendo las diferentes cadenas que necesitamos para poder dar de alta este tipo de contenido personalizado y los diferentes literales que nosotros podíamos cambiar aquí para que se mostran de una forma u otra. Yo los tengo aquí listados directa, o sea, los tengo aquí registrados directamente. Si yo quisiera cambiar algo, lo cambio aquí o si yo quisiera que esto no me lo cargara con comentarlo, volver a mi web y recargar, ya no tengo coches, vale. Es lo mismo que hemos visto antes, pero directamente en nuestro plugin. Si lo vuelvo a descomentar, yo vuelvo a tener aquí los coches y aquí no ha pasado nada. De todo esto, porque al final es un poco lo que hemos visto, aquí estamos llamando a las taxonomías personalizadas, aquí estamos llamando a las marcas, aquí estamos llamando a los combustibles, pues si yo quisiera deshabilitar cualquiera de estas, con descommentarlo de aquí, ya sería suficiente. Lo ideal sería dejarlo activado, vaciar esa categoría de contenido para que nos limpien base de datos las referencias y lo demás que tenga asociado con eso y luego desregistrarlo de aquí. Aquí tengo dado de alta la página de opciones de los coches, que es esto que vemos de aquí, que es lo comentaba en las slides anteriores, configuración de coches, en el que yo por un lado tengo directorio de coches de WordPress en... Y yo aquí tengo las diferentes opciones que quiero hacer. Si yo guardo esto, cuando me vaya a mi directorio de coches... Aquí. Vale, esto es una cosa que pasa y está bien que nos ocurra. Vale, yo tengo aquí todo declarado, pero le doy a directorio de coches y no me carga nada, qué pasa, qué he hecho mal. Es que muchas veces cuando damos de alta un tipo de contenido personalizado nos vamos a tener que venir aquí ajustes, enlaces permanentes y guardar para que nos haga las modificaciones en el fichero de HT Access para que nos salga luego, por ejemplo, ahora, que recarguisalga los coches y no me de un infarto, porque ¿a dónde están todos estos coches que he estado tres días dando de alta a mi web? Aquí vemos que nos ha cambiado el título, pero yo podría incluso ajustarle cosas más... cosas más a la bestia, por ejemplo, si quiero quitarle el filtro o no, si yo se lo deshabilito, cuando me venga aquí, este filtro no va a salir y si yo le digo que quiero tres columnas en vez de cuatro, pues yo se lo cambio aquí y eso me sale en tres columnas en vez de cuatro, ¿vale? Son opciones que nosotros le podemos dejar a nuestro cliente final para que modifique las cosas para este listado y al menos lo tenga aquí, porque yo creo que para el tema de los contenidos personalizados si no lo hacemos así, vamos a tener que poner esta información a fuego en nuestro tema y luego el cliente o la persona que le hayamos hecho esto en la web nos va a tener que llamar, avisar y claro, los programadores nos gustan el día de mañana poder tener la libertad de hacernos panaderos y que no nos sigan pidiendo cambios y cosas, ¿vale? o morirnos o dedicarnos a otras cosas, no estar siempre pendientes de hacer cambios. Vale, a ver qué me queda, vale, poquito, que si no me echan y no me van a dar tiempo. Vale, luego tenemos toda la parte del tema personalizado, claro, para poder tener total libertad a la hora de montar todo esto, lo ideal es tener un tema personalizado para poder dar de alta todas estas cosas que hemos visto. Vamos a tener libertad total en la elección de las plantillas y de los diferentes layouts que creemos. Vamos a poder hacer la vista de Archive, la vista single, es decir, la vista de listado, la vista individual y tener en cuenta la parte del template hierarchy, ¿vale? El template hierarchy es esto de aquí, que lo que nos hace es que nos enseña un poco la estructura que tiene WordPress a la hora de mostrar los diferentes ficheros en PHP para que se muestre, o sea, depende de la sección en la que estemos de la web, se va a hacer una llamada a ese fichero o a otro y nos ayuda a saber cuál es el fichero en PHP que tenemos que tocar o que tenemos que cambiar para mostrar la información que necesitemos. Si yo, por ejemplo, quisiera tocar... Si yo quisiera, por ejemplo, tocar el archive de una página, pues me vendría primera columna, vería qué poner archive, luego iría a buscar, pues si quiero, por ejemplo, un AcustonTempsonomy, pues aquí ya me dice que tendría que utilizar Taxonomy, guióntermino.php, pues si yo doy de alta ese fichero.php en mi archivo de tema, lo tendría... lo podría ver, ¿vale? Si nos vamos aquí al ejemplo, muy rápido. Vemos aquí que tenemos los diferentes ficheros y si me voy aquí, veo que hay un Taxonomy combustible y un Taxonomy marca. Son exactamente igual, lo único que me cambia es algunos literales como los coches de la marca o los coches de combustión y me está haciendo eso. Yo aquí te recojo todo listado de coches en base a esta taxonomía y lo que estoy aquí es habilitándole el filtro, haciendo de la pregunta si hay post y mostrando la diferente información que necesito para mi listado de coches. De la misma forma que si me voy aquí al archive coches, yo aquí lo estoy recogiendo una serie de variables de los campos personalizados y lo mismo, el titular, el contenido, aquí estoy habilitándole el filtro y aquí estoy preguntándoles si tiene post y en base a estos posts me crea la grilla esta que vemos aquí, que es esta que nos está mostrando los coches. Paso muy por encima porque tampoco podemos profundizar mucho pero mientras más o menos se entienda el concepto. Si no la otra manera que tendríamos es haciendo un tema hijo y en la medida de lo posible que este tema hijo nos deje editar cosas, pues lo podríamos cambiar. Esto ya hemos visto y muy resumidas cuentas, acordémonos que la unidad mínima de información no es el editor, tenemos que intentar estructurar los datos todo lo posible, nos tenemos que abstraer de la parte de código de datos a la parte de diseño, tengamos en cuenta que necesitamos una vista de listado y una vista individual y esforcémonos en que la actualización de los datos por parte de la persona que va a utilizar la web sea lo más fácil posible y que haya una posibilidad de que estos datos se puedan actualizar o consultar de forma desatendida. Y como comentario final, siempre me gusta poner una frase de estas motivadoras y es que en el diccionario, el único sitio donde sale antes la palabra éxito que trabajo es en el diccionario. Así que si no queremos acabar como estos hombres y haciendo ñapas por aquí y por allá, pues apliquemos un poco de cuento y trabajemos todo lo que podamos. Y hasta aquí, muchas gracias. Este es mi perro, ¿eh? Tiene tal pelo que no tengo yo. A ver, preguntas. Muy buen. Toda la parte del frontal se hay que hacerla con bloques. ¿Qué? ¿Se podría hacer? Se podría hacer. En principio no habría problema. La historia estaría en que yo creo que no lo veo muy cómodo para hacer actualizaciones masivas el tema de bloques. Igual sería un poco más... No me acaba de gustar, pero sí que se puede hacer. O sea, por ejemplo, si... Si estoy pensando en la jacatón. Claro, por eso me he venido. Claro, nosotros, por ejemplo, lo que planteamos es que todos los templates, todas las plantillas estén dentro del plugin para no tener que depender de un tema que dependa de los plugins y tal. Es claro, habíamos pensado eso, crear la carpeta de templates y meter todos los templates ahí, que ya tienen de bloques para no... Sí, lo puedes hacer. De hecho, igual, o sea, tú puedes tener bloques que simplemente te pinten eso y que no sean ni editables para no tenerte que pegar la currada de que los listados sean editables. Simplemente con que te enganches en el punto y ahí metas el template, luego Google Timber te lo va a renderizar y se va a ver. O sea, eso sería lo más sencillo. El siguiente punto sería que tú pudieras hacer listado que fuera como un bloque y ahí le podrías cambiar opciones. Yo lo he hecho para clientes, bueno, se puede hacer. Es un trabajazo, pero se puede hacer. Y con un mismo bloque de listado, le podrías decir, el listado de coches lo quiero con título, precio y combustible. Y el listado de motos, pues lo quiero con título, no quiero precio y cilindrada, pues que sean opciones en el bloque de Gutenberg y con eso podrías hacer los dos listados con un solo bloque. Poder se puede hacer. Lo que cambia son las horas de desarrollo de uno a otro, pero sí, sí, sí. ¿Alguna pregunta más? Si no hay más es que me explica muy bien o muy mal, ¿eh? No hay un punto medio. Una pregunta, bueno, tres preguntas. Venga. La primera, AdBank must all on file. ¿Pagar o no pagar? ¿Lo pagas tú o lo paga el cliente? Y si lo paga el cliente, ¿cómo le convences? Vale. A ver, yo soy partidario de pagar siempre. ¿Por qué? Porque a mí me gusta cobrar dinero y entonces, si a mí me gusta cobrar dinero y ganar dinero, me gusta que otros desarrolladores también lo ganen. Entonces, pagar siempre. En el caso de AdBank must all on file es una herramienta de desarrollo. Por lo tanto, lo más sensato es que lo pague el desarrollador. Lo bueno que tienes es que, si no me equivoco, caldo yo al menos la que tengo es licencia lifetime. Es decir, yo pago una vez y tengo instalaciones ilimitadas de tiempo ilimitado. Ahora creo que ya no está, pero bueno, con que la renueves cada año, ya lo tendrías. En el peor de los casos que te hicieras panadero y no quisieras seguir con eso, se lo puedes explicar al cliente y yo qué sé, si los primeros cinco años se ha beneficiado de eso y no lo ha pagado, el sexto año simplemente tiene que pagar, no sé si son 25 euros o 30 euros al año por tener una licencia para una web, pues la apaga en la empresa y ya está. Y si la empresa es muy tiquismiquis que no tiene ninguna dependencia, que la apague todo el de inicio y ya está. En mi opinión, pero bueno, si no, yo creo que esa es la mejor. O sea, tú como desarrollador, tú pagas tu licencia, desarrollas con eso y si el cliente a futuro os cambia de desarrollador o lo que sea, pues, o eredese el licencia o se compra una nueva y ya está. Lo bueno es que la licencia lo único que te va a hacer es activar o desactivar las actualizaciones. No te va a modificar nada más en tu instalación. Entonces, ahí tienes bastante ventaja. Gracias.