 Entonces, a ver lo que les decía, porque como vamos cambiando de salas, presentamos a la gente de la organización, que tenga la oportunidad de salir y de que tenga un poquito de visibilidad. Aure es nuestra miembro de organización, que el año pasado estuvo en el equipo de voluntaria. Tenemos un equipo también bastante internacional, ella es francesa, se vino aquí a Valencia y trabajaba con WordPress, unió con nosotros a la comunidad local y ya estuvo el año pasado colaborando con nosotros, este año está la organización y ha sido quien se ha encargado de coordinar a los 20 ponentes que tenemos hoy, de pedirle las presentaciones, ir detrás de ellos, rogarles que antes entregaran los males, sacar el lático en algunos momentos, un fuerte aplauso para Aure, por favor. Pues ahora me toca a mí presentar uno de los ponentes, que es Mauricio Gerves que es consultor web, que nos viene de Madrid, pero también de todo el mundo, porque es normal a digital, y por cierto tiene un canal YouTube súper interesante, que os recomiendo, pues Mauricio también da charlas, exponente internacional en Worldcamps de España, pero también de todo el mundo y hoy lo tenemos aquí en Valencia para presentarnos como hacer un buen uso de los campos personalizados con ACF. Un fuerte aplauso para Mauricio. Gracias Aure. ¿Se me escucha? Bien, perfecto. Bueno, muchas gracias Aure, tuve la posibilidad de conocerla hace dos años en Zaragoza y después en otros lugares del mundo y mire, ya es su organizador y voluntaria de una Workup, con lo cual es genial. Muy bien, Aure. Muchas gracias por estar aquí en esta presentación, o voy a hablarles de ACF, tenemos usuarios de ACF, del plugin ACF, mantenga en la mano arriba y que lo sepan utilizar bien. Hay dudas, ¿no? Bueno, vamos a ver un pequeño ejemplo, vamos a ver una estructura de una página web de una idea que me he inventado, un poco graciosa. Esta charla ya la he dado en Madrid hace dos años, pero le he hecho un refurbished, como se dice en inglés, para que sea un poquito más nueva e interesante a todos los que estén aquí presentes. Como me ha presentado Aure, me llamo Mauricio Gelves, me encuentran como Mao Gelves en todas las partes de la red de internet. Ahí tiene mi web, mi Instagram, mi canal de YouTube, por si quieren indagar. Hay algunas cosas técnicas, pero más, sobre todo ahí, sobre tema de viajes. Sin más dilación, vamos a comenzar con la charla. Hay importante, también soy embajador de marca de Sighground, que gracias a ellos estoy aquí y en todas partes del mundo dando charlas técnicas como esta. Vamos a comenzar hablando de boxeo. Poco raro, pero vamos a hablar de boxeo y de periodismo. Conocen esta pelea de Cassius Clay's y Sonny Liston? Se considera que es uno de los eventos deportivos más importantes del siglo XX, y esta foto ha ganado como una de las mejores fotos deportivas de todo el siglo anterior. Cassius Clay's versus Sonny Liston, Cassius Clay's más conocido como Muhammad Ali, luego que se ha convertido a esa religión. Pero vamos a suponer que tenemos un jefe que nos manda a trabajar, a cubrir este evento deportivo, esta pelea, que en ese momento no junto a mucha gente. Había 4.000 personas nada más ahí. Somos periodistas y nos mandan a cubrir esta nota. Tomar fotografías, ver cuáles son los comentarios de la gente, que luego tendremos que volcar en algún periódico. Vamos a suponer que somos ese señor de ahí al cual vamos a llamar Harold, por poner un nombre. Y esa persona somos nosotros y tendremos que recuperar toda la información todo lo que suceda alrededor de esta pelea. Harold está con su libretita, con su cámara de foto y empieza a escuchar cosas de sus compañeros. Por ejemplo, es el mejor boxeador de todos los tiempos, dice Juan Carlos Espinosa, que lo tiene al lado. Y otro compañero dice, y yo, no ve a la aguanta que pega en nota. Paco Ferreira y, mientras tanto, Harold va tomando nota y tomando muchas fotografías. Entonces, el jefe también le pide, bueno, dentro de una pelea hay un montón de información, no solamente los nombres de los dos boxeadores, como resulta la lucha, sino que hay todo un tema de estadística que normalmente todos los periodistas o medios suelen cubrir con respecto a estos eventos. Con lo cual, Harold tomaba un montón de notas que luego tendría que volcar en su periódico. Llega el periódico, empieza a escribir la nota con su foto, y ve que solamente el Wordpress le permite poner un título y una descripción. No tiene otro lugar donde poner estos campos especiales, su altura, el peso, el récord, los puntos de cada round. Se vuelve loco buscando por todas partes con el nuevo Gutenberg y no encuentra dónde. Dice, ¿dónde puedo agregar los datos? Dice, Harold, está perdidísimo. ¿Qué hace Harold? Harold va al departamento de sistemas, hablar con el chico que está detrás de Wordpress y de toda la movida del periódico, y le pregunta, oye, ¿tú sabes dónde puedo meter toda esta información que me lo han pedido, pero no tengo dónde? ¿Dónde puedo ponerlo? Y el chico dice, claro, hay tres formas de poder hacerlo dentro de Wordpress. La primera de todas es utilizando los campos personalizados que vienen por defecto de Wordpress, que vienen existiendo hace un montón de tiempo, pero que están un poco ocultos, escondidos. Y más aún, ahora con la nueva edición de Gutenberg. Para que lo sepan, tienen que ir a esta pequeña pestañita a los tres puntos, opciones, y abajo de todo tenemos este pequeño checkbox que viene por defecto desactivado. Y ahí abajo tenemos los campos personalizados por defecto de Wordpress. Ahí tenemos un campo 1, un valor cualquiera. Y ahí ya tenemos el valor extra que se asocia al artículo que está escribiendo Harold. Estos son los campos que vienen por defecto con Wordpress. ¿Cuáles son los problemas que tienen este tipo de campos personalizados con Wordpress? Primero, es que tiene una funcionalidad muy precaria. Como hemos visto, la ventana no es muy interactiva, no es muy intuitiva, la experiencia de usuario es muy pobre. Lo segundo que tenemos es inconsistencia de datos. Imagínense si nosotros tenemos que poner en un campo personalizado el color de fondo de un artículo. Un usuario podría escribir rojo, otro usuario podría escribir red, y otro usuario podría escribir el número de hexadecimal, ¿vale? Y cada cual piensa que está escribiendo en la forma correcta, sin embargo, el sistema no lo entiende porque hay inconsistencia de datos. También tenemos cero control de los datos cargados, porque eso no tiene asociado ningún Javascript que digano, esto está bien escrito, este formato de fecha no está bien. Vale, todo lo que pongamos dentro de esa caja de texto, Wordpress se lo va a comer y lo va a guardar a la base de datos. Y por último, tenemos una repetición de claves entre distintos custom post types. ¿Qué significa? En el ejemplo hemos visto el campo personalizado campo 1. Lo hemos visto dando de alta un artículo sobre esta pelea. Pero si vamos a dar de alta una página, también tendremos el campo número 1. O si vamos a dar de alta un custom post type cualquiera, personalizado, también tendremos el campo número 1. Con lo cual, esto no está bien. Yo no puedo pedir el nombre del boxeador o el peso del boxeador en una página que hable de quienes somos nosotros de nuestra empresa. No tiene sentido. Pero vale, el chico de sistema lisa, no te preocupes porque tenemos más opciones. La segunda es la propia API que tiene Wordpress para crear campos personalizados, para crearlos. Vale, pero no creo que te gustaría meterte en esta sección, ¿vale? ¿Por qué? Porque hay que hacerlo todo a mano. Esta es el handbook para hacer los metaboxes. Está súper bien para los desarrolladores que trabajen en grandes proyectos y tengan el tiempo. Yo creo que es la forma correcta de realizarlo. Todo a mano, ¿vale? Campos personalizados en el cual nosotros podamos decir qué valor se tienen que introducir, cómo se tienen que guardar, etcétera, etcétera. Así que tenemos total libertad para crear campos con la API de Wordpress. Tienes que programar absolutamente todo. Y cuando digo todo, es el HTML, el CSS, el JavaScript para verificar los datos que estás guardando y la propia línea de código para guardarlo en la base de datos. Lo recomiendo para proyectos con grandes presupuestos. Está bien escrito. Presupuestos que tengan el tiempo para poder realizarlo porque de esa manera se aseguran que tienen la información correcta. O también, si tiene que crear plugins de repositorio. Si van a subir algún plugin al repositorio, les recomiendo que utilicen esta API en lugar de la que vamos a ver a continuación. Y el chico de sistema, que no le hemos puesto nombre, le dice que tenemos una tercera posibilidad, que es utilizando ACF, que es un plugin superpotente que podemos utilizar para crear diversos tipos de sistemas en forma muy rápida, ahorrando muchísimo tiempo y por ende dinero. Para que no lo conozca, quiero lo conocer ACF. Vale, hay algunas personas. Es un plugin buenísimo, hay una versión gratuita, hay una versión de pago. Y lo que nos permite es introducir todos estos campos que vemos ahí, el selector de fecha, un selector de posts de relaciones, el what you see, what you get de toda la vida, una galería, un selector de imágenes, un montón de campos personalizados a distintas zonas de WordPress, un custom post type, un artículo en particular, una categoría en la página de los usuarios. Podemos elegirlo. Ya vamos a verlo en los ejemplos. ¿Quienes ver una demo? Vale, todo esto va a ser en vivo, pero para evitar cualquier problema lo he grabado, va a ser un vídeo. Así que aquí tenemos, vamos a imaginar que este es el website que está haciendo Harold, los artículos que está escribiendo y tiene ahí su primer artículo que ya dio de alta. Y este sería más o menos el resultado final. Él va ahí al artículo, quedó súper bonita la web, va al artículo, entra, y aparte de tener la imagen destacada, el título y la descripción, seguimos bajando. Ahí está parte de la información con un lore en Ipsum. Alas, ahí tenemos los dos peleadores, los datos de la pelea, dónde fue, y todos los puntos de todos los rounds, ¿vale? Esto podríamos hacerlo tanto con Gutenberg, que luego hay una charla de vidaña muy interesante, o también podríamos hacerlo con ACF. Vale, todo depende de cómo queramos guardar la información en la base de datos. Recuerde que Gutenberg guarda todo en el campo post-content, ¿vale?, de la tabla post. Sin embargo, con ACF lo guarda en la tabla post-meta, un poco de información para los desarrolladores. Pero es importante porque si luego queremos hacer búsquedas, va a ser mucho más rápido si lo buscamos en post-meta, que si tenemos que buscar dentro del post-content algún string específico, ¿vale? Así que hay que saber muy bien cómo estructurar la información y lo vamos a ver en un ejemplo a continuación. Pasos para crear esto que acabo de mostrar, ¿vale? Harold se ha animado, se ha leído el manual de ACF, dijo voy para adelante y lo voy a montar. ¿Cuáles son los pasos para armar lo que acabamos de ver? Primero, es crear el custom post-type boxeador, ¿vale? Porque el boxeador va a tener más peleas y quiero reutilizar los datos de esta propia persona. No quiero estar cargando constantemente el nombre del boxeador, su imagen destacada y demás. Así que esto lo vamos a reutilizar, vamos a crear un custom post-type específico. Aquí tenemos un WordPress. Me voy a girar para dar el ejemplo y ir explicándoselo. Tenemos un tema que es el que creó Harold, que se llama Free News, pero también hemos creado un plug-in llamado Work on Valencia. Dentro tenemos una carpeta de inclusive, ahí vamos a expandir un poco para que se lea bien. Perfecto. Hay una carpeta custom post-types y ahí tenemos una de boxeador, una clase. Double click. Esta es una clase que yo utilizo, es un template mío, en el cual solamente tengo que cambiar tres líneas de código para dar de alto un custom post-type. Eso lo puedo borrar, no me sirve, bien. Y ahí tengo el nombre del custom post-type, que es boxeador, el nombre en sigular y el nombre en plural. Con esas tres variables, solamente, perdón, modificando esas tres variables, yo ya genero todo el custom post-type, que incluye las etiquetas para mostrar en el vaquen, el rewrite, que es para el caso de si queremos tener el archivo, no un listado de custom post-type, los permisos, y por último, la orden para registrar ese custom post-type. Y más abajo hay algunas pequeñas cositas de cuando, la privacidad de quien tiene acceso al custom post-type, y cuando damos a guardar o publicar que diga boxeador actualizado, en vez de entrada actualizada, ¿sí? ¿Tiene sentido? Si quieren luego este template, está en McGeekHalf. Bien, paso número uno, crear el custom post-type boxeador. Segundo paso, tenemos que crear los campos personalizados. ¿Vale? ¿Qué campos vamos a poner? Pues para el nombre del boxeador, vamos a reutilizar el título de Wordpress, ¿vale? Vamos a guardarlo ahí en la base de datos y utilizaremos ese. Para la imagen del boxeador, vamos a utilizar la imagen destacada propia de Wordpress, pero después tenemos otros tres campos que sí vamos a necesitar que ACF nos eche una mano. Uno es la fecha de nacimiento, ¿vale? El cual utilizaremos el campo del tipo Daytime, para que haga una, para que la información que se guarde ahí tenga consistencia, que no podamos poner cualquier otro valor. La altura, para el cual utilizaremos un número, y diremos en la descripción, ingresa la altura en centímetros, para que pueda poner 180, 200, 220 centímetros, etcétera. Y por último, el peso, que también será en kilos. Y para ello, utilizaremos el campo número de ACF. Bien, ¿cómo se hace todo esto? Que ya lo hemos pensado, lo hemos diagramado en datos. Vamos a verlo, cómo se genera con ACF. Perfecto. Vamos a Cast on Fields, que es el plugin. Tenemos ahí el boxeador. Damos de alta un campo, llamamos fecha de nacimiento, que es del tipo selector de fecha. Altura, que es del tipo número. El peso, que también es del tipo número. Y a cada uno le he dado un nombre específico para que luego lo podamos reutilizar en el frontend, ¿vale? En el tema de Wordpress. Muy simple. Y lo vamos a mostrar cuando el post type sea igual a boxeador, que fue lo que hemos hecho en el paso anterior. Hasta aquí vamos bien. No estamos mareados ni perdidos. Bien, ¿no? Bueno, espero hacerlo rápido, por si tienen alguna duda. Pasamos a la sección de preguntas. Ahí estamos dando de alta a un boxeador. Ahí iría el nombre. Ahí pondríamos la fecha de nacimiento, cualquiera. La altura en centímetros. Y el peso. Sí, creo que ahora voy a elegir una fecha cualquiera. Ahí, sí. Ahí selecciona la fecha. Genial. Ahí haríamos clic ahí en publicar. Y ya tendríamos un boxeador. Pero esto es como los programas de cocina, ¿no? Le voy a mostrar aquí. Ya lo tengo hecho. Otros boxeadores que ya he dado de alta. Como el caso de Cassius Clayson y Liston, que son los protagonistas de esta pelea. La altura en centímetros, 180. Ahí está. Lo actualizamos. Perfecto. Y como pueden ver, ACF, aquí hemos quitado Gutenberg. ¿Por qué? Para que queremos Gutenberg aquí, si vamos a guardar la información en otro sitio, mostramos solamente lo que el usuario necesita cargar. Ni más, ni menos. No es que yo quiero cambiarle el color. No, no, no. El boxeador necesita esta información y punto. Y no le muestro absolutamente más nada. Todo eso se puede modificar desde ACF. Paso en número 2. Vamos a crear ahora un custom post type de pelea. ¿Por qué he decidido hacerlo esta manera? A ver, hay mucha forma de poder implementar esta solución. Lo he pensado de esta manera, porque yo si lo guardo como un custom post type, puedo utilizar ese mismo registro de esa pelea, que va a haber un montón de información, en distintos artículos. No tiene porque ser un simple artículo de una pelea. Puedo hablar hoy, o cuando cumplió 50 años de la pelea, puedo volver a recuperar ese custom post type, ese registro en particular, y hacer otro artículo al respecto, contando con toda esa información. ¿Me siguen? Genial. Vamos a crear el custom post type de pelea, exactamente con la misma plantilla. Vamos a ir más rápido ahora, en el plugin de Valencia, custom post type. Ahí tenemos la clase pelea, y es exactamente lo mismo. Lo único que he cambiado son los tres strings de ahí arriba. Hay una cuarta y una quinta variable que es para decirle, bueno, voy a permitirte tener el editor, el título, imágenes destacadas. Pero no viene tanto al caso. Vamos de alta las etiquetas, las propiedades. Registremos el custom post type, que cuando diga publicádica, la pelea ha sido guardada con éxito. Y demás, el mismo template. No se ha modificado nada. Siguiente paso. Tenemos que crear los campos personalizados con ACF para este custom post type en particular. ¿Qué datos vamos a guardar en una pelea? Obviamente, quién es el luchador número uno, el peleador número uno, del cual solamente vamos a guardar el peleador que es del tipo post, ¿vale? Ese es un campo especial de ACF. Vamos a recuperar algo que ya está hecho dentro de WordPress. Y ahí estará toda la información. Y los puntos. Los puntos es del campo repeater de ACF porque en una pelea puede haber muchos rounds. Entonces, en el round uno, el boxeador hizo 10 puntos, en el round dos hizo así. Si se le pongo como repeater, no hay ningún límite. Si la pelea dura 100 rounds, pues que dure 100 rounds y la persona podrá cargarlos sin ningún problema. También daremos de alta los datos que son específicos de una pelea en un momento en particular, que es la fecha en que lugar se hizo y quién ha sido el vencedor. En el vencedor también doy una posibilidad de elegir un post del tipo boxeador. Y por último, obviamente, el segundo luchador que compartirá los mismos campos del boxeador número uno. Vamos a dar de alta estos campos. ¿Está funcionando ahí? Ahí va. Castonfields. Vamos al de peleas. Tenemos 10 campos. Hay uno que es de estania. Vale, esos son los datos propios de la pelea, el lugar, la fecha y el vencedor, los datos para el boxeador número uno y los datos para el boxeador número dos. Como ven el primer campo es del tipo tab. Y es para mostrarle al usuario de vaquen un poco mejor. Lo mostramos cuando sea del tipo pelea, el post type. Actualizamos los valores. Vamos a pelea, agregar una nueva y vemos que ya está mucho más bonito, que sabemos dónde tenemos que ir a registrar cada información. Ahí ponemos un título cualquiera. Callus Clay's versus Soniliston. Inclusive esto lo podríamos hacer con algún filtro en forma automatizada si quisiéramos para mantener una estructura donde ha sido la pelea, la ciudad, la fecha, cualquiera. Quien ha sido el vencedor? Vemos que automáticamente ya se muestran los dos boxeadores que hemos dado de alta y ahora sí damos de alta los valores propios para el boxeador. Ahí estaría genial que ya se autocargue y ahí vamos dando de alta todos los puntos de cada round, ¿vale? En el ejemplo, solamente cargo 6 para no aburrirlos demasiado. Y el segundo luchador y lo mismo, cargo ahí los rounds. Genial, perfecto. Ahí clicaríamos en publicar y tendríamos la pelea dada de alta, pero le voy a mostrar uno que ya tengo hecho, ante mano, que ya está cocinado y horneado, que es la pelea de la que estaba hablando Harold. Mujer Medali contra Soniliston en el que ya tenemos una imagen destacada, los datos correctos, quien ha sido el vencedor y demás. Vamos viendo cómo delimitamos lo que el usuario tiene que cargar con ACF, cómo no le damos la posibilidad de que cargue datos en cualquier lado, que cambie colorcitos, tipografías. O sea, simplemente vamos a darle un margen de juego hasta donde nosotros se los permitamos para que la información esté bien guardada en la base de datos. Se puede utilizar en ese website o si el día de mañana tiene que migrarse a un nuevo sistema, sea fácil de poder exportar. Paso número 3, ya tenemos la información en la base de datos, bien guardada. Ahora tenemos que mostrarla en el frontend, tal como se lo mostré en la demostración. Para ello, podemos crear un single pelea. En este caso, creo que lo he hecho con un single. Vamos a ver el ejemplo. Nuevamente el ejemplo de cómo se vería el resultado final. Y ahora vamos a ver en el fichero. Cierro, cierro. Vamos a ir al single PHP, creo, single PHP, porque estamos hablando de un artículo no del single del custom post type. Vemos que está obteniendo toda la información del template part que está en content, y ahí tenemos toda la información. Vamos a cerrar un poco ahora para que sea más entendible. Lo primero que hacemos es recuperar el dato de la pelea. Utilizamos la función getfield, que es propia de ACF, para obtener un valor de la base de datos y con los nombres propios. Ahí estamos cerrando para que sea más simple de ver. Vale. Y vemos que tenemos cuatro partes bien identificadas. Primero lo que es el meta de la pelea, que son los datos propios de la pelea, el dato del boxeador número 1, los rounds que han habido y los datos del boxeador número 2. Vamos a mostrarle ahora. Esa es la parte del meta, los datos propios de la pelea, los datos propios del boxeador número 1, los rounds y el boxeador número 2. Genial. A ver qué hay en el HTMLS. Tan simple como un H3, the field, la diferencia es que hace un eco directamente de lo que estamos obteniendo de la base de datos. Pelea lugar, pelea fecha y un identificador. Ahí mostramos lo que es el túmne del boxeador del castón postcard y el título, que es donde está el nombre. En el round tenemos un bucle, porque es un repeater, ¿vale? Le estamos dando la posibilidad al usuario de vaquén que cargue tantos rounds como quiera y es lo mismo para el boxeador número 2. Un bucle mostrando ese subcampo. Pelea punto boxeador número 2. Obviamente, esto les recomiendo que cada campo que utilicen o que quieran utilizar de ASF vayan a la documentación donde tienen un ejemplo muy claro de PHP que inclusive estas pueden copiar y pegar y solamente modificar el nombre que ustedes le hayan dado a ese campo personalizado. Así que haciendo buen uso de los campos personalizados que es el título de esta charla. ¿Cuál es la diferencia de todo lo que hemos visto hasta ahora? Primero, ¿podemos agregar el plugin ACF en nuestro tema o en nuestro plugin que queramos enviar a un cliente? Sí, podemos hacerlo, ¿vale? La versión gratuita de ACF podemos incluirla en casi todas las situaciones, menos obviamente en compartir una licencia que hayas comparado. Y la versión pro de ACF, que es la que permite tener el campo repeater, entre otros tantos, lo tenemos más prohibido, por así decirlo, o no, no permitido. Solamente podremos utilizarlo en los plugins o en los temas en los cuales haremos negocios. En ese caso sí. Mi recomendación es no incluyan nunca ACF en vuestros plugins y en vuestros temas. Lo que sí podemos hacer es decir, este plugin necesita de ACF para funcionar correctamente, ¿vale? Básicamente, porque en algunos proyectos por ahí vamos a necesitar 2 o 3 plugins de nuestra propia creación, en el cual todos utilicemos ACF y no tiene sentido que hay dentro, haya 3 copias de ACF distintas. Y también para que podamos tener ACF siempre actualizado, porque cuando haya una actualización tendremos que ir a modificar todos nuestros plugins. ¿Cómo trabajar como una ACF en equipo? Primero tendremos que exportar todos los campos que hemos creado. Ahora voy a mostrar un ejemplo, ¿vale? No se queden con los títulos solamente. Vamos a agregar este código que hemos exportado a nuestro tema, a nuestro plugin. Haremos el push para que los demás programadores puedan tener los campos que hemos creado. Y por último, podemos borrar libremente este campo de ACF. ¿Cómo se hace eso? Pues tan simple como ir a Castonfill, a la sección de herramientas, tools. Vamos a buscar el campo personalizado que hemos creado, en este caso boxeador. Generamos el PHP y exportamos el fichero que es un JSON. Generamos el PHP, copiamos todo ese PHP y lo voy a agregar en mi plugin. Copio, voy al plugin de Valencia y tengo una carpetita por ahí especial de ACF. Doy de alta un fichero nuevo. Obviamente que hay que hacer un requier de todos estos ficheros que estoy agregando. Boxer, PHP, y ahí pego el código, ¿vale? Ahí me doy cuenta de que no es PHP. Ahora sí, perfecto. Siguiente paso, puedo ir tranquilamente a ACF borrar el campo de boxeador. No solamente lo borro de ahí, sino que voy a la papelera y digo, borrate, que te he dicho que te borres, que no te necesito más. Y puedo ir tranquilamente ahora al frontend y verificar de que todo sigue funcionando correctamente. Porque ACF ya lo está cogiendo directamente del código. Beneficios, tenemos el código en forma física. Podemos hacer una versión de control. Podemos compartir esta información con el resto de los programadores. ¿Cómo gestionar los cambios? Bueno, disculpen que no esté paso a paso. ¿Qué pasa si nosotros entregamos una página web y a los 5 años viene la persona, el cliente y dice, no, ahora quiero que el boxeador tenga un campo nuevo, ¿vale? ¿Quiénes son sus familiares? ¿Quiénes son sus padres? Vale, acabamos de borrar el campo en ACF. ¿Cómo hacemos ahora para escribirlo por código PHP? Sería súper difícil. No, hay solución. ¿Se acuerdan que teníamos ahí el JSON que habíamos descargado? Vamos a ver qué hacemos con ese JSON. Vamos a la carpeta de descargas. Lo descarga con ese nombre raro. Lo que voy a hacer es darle el nombre de boxer.json para identificar lo mejor. Y lo voy a agregar a mi proyecto. Venga, cierro esa ventana que me molesta. Arrastro el boxer JSON a la misma carpeta de ACF. Sí, agregalo sin ningún problema. Y me despreocupo de lo que haya ahí adentro. No pasa nada. Entonces, luego voy al backend de WordPress, herramientas nuevamente. Y tenemos aquella sección que es para importar campos personalizados. Levanto el JSON, que está en el sitio web que estamos trabajando en local. Content, plugins, Valencia, includes, ACF, y el JSON. Genial. Lo abrimos, importar fichero, y automáticamente volvemos a tener el campo personalizado boxeador. Importante, tenemos que quitar el código de PHP para que ACF no lo levante de aquí, sino lo que vuelve a estar en base de datos. Vamos a boxeador, aplicamos los cambios que queremos aplicar que nos ha solicitado el cliente. Actualizamos los cambios, y una vez más volvemos a hacer los pasos anteriores. Exportar el PHP, exportar el JSON y actualizarlo en nuestro proyecto. Una vez que está actualizado, Git commit, Git push, y todos contentos, todos los desarrolladores. Importante, volver a exportar el JSON que contenga estos cambios, porque si no, dentro de un año o dos años no tendremos los cambios que hemos aplicado en esta oportunidad. Así que, señores, no hay excusa para trabajar mal con ACF. Hay mucho ruido de no ACF, no se usa bien. Es difícil de compartirlo, porque guarda la información en la base de datos. Ya hemos visto de qué manera se puede realizar. Os recomiendo que lea la documentación de ACF, está en inglés, pero muy bien escrita e inclusive en detalle para cada uno de los campos personalizados. Eso es todo. Muchísimas, muchísimas gracias. Y Harold está deseoso de escuchar preguntas si tienen dudas. Exacto, sí. Muchísimas gracias, Mauricio. Empezamos con el turno de preguntas. Tenemos aquí a los dos voluntarios. Manos arriba, dudas con ACF, tenemos un crack aquí que nos puede solventar cualquier cosita. Venga, habéis bajado la mano muchos en los que lo utilizáis bien, ¿no? Muy bien, buena. Alguna pregunta? Está todo claro. Todo claro. Y si no, siempre me pueden encontrar en el hall de la huarca. Venga, Ana, aquí adelante. Vamos a romper el hierro. A romper el hierro de las preguntas. Mauricio, muchas gracias por otra charla espectacular. Muchas gracias. ¿Qué editor de código utilizás y por qué? Esto es una pregunta muy personal. Yo particularmente utilizo PHP Storm de hace tiempo, porque hay una sola razón. Porque puedo utilizar el xDVal, que fue la charla que di en Sevilla, es por el único motivo. Pero vamos, hay muchos y buenos editores visuales. Visual Studio me ha sorprendido. Yo he dejado trabajar con Microsoft hace muchos años, pero el editor que está está súper bien. Tiene la posibilidad también de agregarle como estos pequeños plugins o componentes al Visual Code. ¿Se llama? Visual Code. Visual Studio Code, el Eterno Sublime. Pero en mi caso particular, yo prefiero trabajar con PHP Storm para poder utilizar el xDVal, el ir paso a paso, debugueando y viendo las variables. ¿Se escucha? Yo quería hacer dos preguntas. Una, cuando vas a poner el plugin en tu WordPress, ¿el de Valencia? No, el tuyo, que estás ahora mostrando a todos. Es fácil de configurar a lo que sería el propio WordPress, o tienes que hacer alguna cosa en particular. Me estás preguntando sobre la utilización propiamente del plugin de Asf. Es súper simple. No lo he querido mostrar aquí para no hacer una introducción muy básica de Asf, sino ir un pasito más allá. Es súper simple. Tienes ahí comienzas de una tabla con cero filas, agregar campo. ¿Qué tipo de campo quieres? Tipo fecha. ¿Qué nombre le vas a poner al campo? Pues vamos a llamarle de una forma específica y ese será el nombre que tendrás que utilizar en el frontend. Una vez que tú ya has llenado absolutamente todo y que puedes jugar con la visualización, como has visto, que tiene distintas pestañas. En algunos casos hubo tres campos en una misma fila. Eso también se puede editar para que el usuario de Vaquén no tenga un Vaquén feo, sino la idea es que esté interesado y le hagamos la vida fácil al usuario. Una vez que ya tienes todos los campos, bien bonitos, hay una segunda sección muy importante de que es OK. Todo este grupo de campos. ¿En qué parte de WordPress quieres mostrarlo? En este caso es cuando el post type sea igual a Boxer. Pero podría ser cuando la categoría sea igual a deportes, cuando el usuario sea igual a tal persona. Vale, siempre hablando del Vaquén. Siempre hablando del Vaquén. Es muy intuitivo. Y después hay una tercera opción. Son tres partes muy diferenciadas. Campos. ¿Dónde quiero mostrarlo? Y la tercera sección es OK. De lo que ya existen WordPress por defecto, ¿qué quieres ocultar? Pues el título ocultamelo. La imagen destacada ocultamelo. Vale, para que el usuario solamente cargue lo que tiene que cargar. Nosotros nos aseguramos que los datos estén bien guardados en la base de datos. Pero es muy simple. ¿Y la segunda? La segunda es sobre el flujo del trabajo que has mostrado. Primero, creabas los campos, lo eliminabas. Luego se quedaba en la base de datos y luego eliminabas. Tiene que ser así o, por ejemplo, el último lo puedes dejar perfectamente. Muy buena pregunta. Ahora mi ejemplo es, yo no voy a trabajar. En principio no voy a trabajar para nadie. Yo trabajaría para mi propia página web. Entonces, eliminarlo, pues si lo voy haciendo, voy cambiando a lo mejor, ya no es un boxeador. En mi caso sería para fotografías. Quisiera hacer una temática de fotografías de paisajes, otra de fotografías de ciudad. Y tendría que tener varios post types diferentes y ir trabajando sobre ellos, ir editando, ir creciendo un poco sobre lo que es mi experiencia. Vale, por más que trabajemos solos, por más que trabajemos solos, siempre es buena idea que hagamos la exportación del ACF a código. Por el simple hecho de evitar a Wordpress que vaya una vez a base de datos a recuperar toda esa información y traerla. Vamos a ganar en rendimiento. Es verdad de que por ahí es un poco encorroso hacer esto de borrarlo. La forma en la que yo lo hago es trabajo en el Wordpress en forma local. Y hasta tanto, yo no entrego el proyecto. No lo elimino, lo dejo en la papelera. Si tengo que hacer alguna modificación, lo traigo de la papelera de vuelta ACF. Modifico, exporto el PHP. Eso sí, para ir haciendo el cómit de los cambios. Pero lo dejo en papelera. Y ya antes de entregar el proyecto, pues lo borro tranquilamente sabiendo de que tengo el JSON en mi proyecto. Pero sí que es importante, por más que trabajemos solos, de que los cambos los exportemos a PHP para que sea más rápida la carga de nuestro Wordpress, que no tenga que hacer tantas consultas a base de datos. Entonces, por lo que entiendo, sí que es necesario hacer todo el trámite para evitar que el Wordpress vaya cada vez y se haga el trabajo. Aunque sea uno para uno mismo, todo el uso de ese trabajo, hasta incluso lo definido, el de borrar y exportarlo, vamos a decir, a papel. En código. En código se tendría que hacer. Sí. Es necesario. Sí, básicamente para esto, para que sea más rápida la carga de, porque si lo dejas en base de datos y algún día tienes que trabajar con algún programador, ¿cómo le envías tus campos personalizados? No puedes. En cambio, si está en código, sí. Siguiente pregunta, Dani. Mega, qué menudo. Yo ya escuché el problema de Harold en Madrid y esta vez he vuelto a aprender cosas, así que muchas gracias. Genial. No me acuerdo si le había llamado Harold en Madrid. No importa. Mi pregunta es sobre locking. ¿Tiene sentido gestionar toda la estructura de campos con ACF, pero después, a la hora de recuperarlos, utilizar el del API de Wordpress, el GetPostMeta, o mejor usa el GetField, porque voy a tener problemas? También es una buena pregunta, ¿vale? Con el tema del locking en ACF. Lo bueno es que ACF respeta esto. Y si conocemos un poco de base de datos, la información la guarda primero en forma estándar de Wordpress, como si estuvieras utilizando el campo personalizado por defecto, y guarda una segunda fila con el registro propiamente de ACF de cómo tiene que hacer tratamiento de esa primera fila, ¿vale? Con lo cual el día de mañana ustedes no quieren utilizar ACF, lo pueden desistalar tranquilamente sabiendo que en el PostMeta van a tener siempre el registro original, ¿vale? Y pueden hacer tratamiento con código a vuestra manera, ¿vale? No habría ningún problema de locking en este caso. Quería saber, me parece muy interesante usar ACF para consistencia de datos, pero por ejemplo, en el ejemplo que has puesto, he visto una posible inconsistencia que no sé si se puede solucionar. Sí, sobre todo el custom post type de pelea cuando elijo el vencedor, por ejemplo. El tema de los puntos de cada round podría poner... 11 rounds y 6. 11 y 6. Hay alguna forma de... Sí, hay filtros. Hay filtros de ACF que nos permiten hacer ciertos controles antes de publicar, ¿vale? Pero ya es un poquito más de programación avanzada porque tienes que conocer cuáles son los filtros propios de ACF, interactuar, verificar cuáles son los valores. No he querido ir tan en profundidad y otro dato inconsistente que hay es si selecciono los dos luchadores en la pelea en el campo intermedio de quién es el vencedor, no tendría que mostrarme todos los boxeadores que tengo en Wordpress, sino los únicos dos boxeadores que he cargado, ¿vale? Es otro punto. Pero si todo tiene solución, utilizando filtros y acciones propias del plugin, ¿qué vienen? Es que están súper bien documentadas. Tenemos alguna pregunta más? Aquí y otra. ¿Dónde está? Hacía atrás, ¿vale? No te escucho. Muy interesante. Muchas gracias. Utilizando ACF, ¿podemos crear categorías y etiquetas o algo parecido? ¿Cuál fue la pregunta si podemos crear categorías? Sí. ¿Derejadores crear una categoría de boxeadores o algo parecido? No se puede crear categorías con ACF. Para eso tienes que crearlo por código o con un plugin que existe para crear categorías. Piensa en ACF como en campos personalizados extras que vamos a agregar a todo lo que viene en Wordpress por defecto. Un post. Tenemos un título y un campo y la infinidad de campos personalizados que tú quieras crear. Si el boxeador, vamos a poner, vamos a crear una categoría ahora rápida. Vamos a poner de qué lugar es el boxeador, ¿no? Entonces yo pongo. Cassius Clay's es de Estados Unidos, ¿vale? Agrega la taxonomía. Esa taxonomía podría agregarla en el boxeador o en la pelea donde quisiera, ¿no? Oye, al boxeador, agrega la taxonomía location para saber de dónde es. Uo otro caso es, podríamos agregar campos personalizados a la categoría location. O sea, yo quiero que cuando den de alta Estados Unidos, también que aparezca la banderita. Pues tengo que hacer un custom, perdón, un ACF específico para la taxonomía location. A parte del nombre, vamos a agregar un selector de imagen para que el usuario final pueda agregar, el usuario de vaquen pueda agregar una bandera. Entonces cuando yo muestro en el boxeador, Cassius Clay's location es de Estados Unidos y al lado en chiquitito le pongo la bandera que ya está relacionada con esa taxonomía, ¿vale? Las dos posibilidades, agregar la categoría a un custom post type o a lo que quieras o agregarles campos a una taxonomía. Sí, se puede. Espero no marear demasiado con los ejemplos que se entiendan. ¿Alguna pregunta más? Nada. Muchísimas gracias, entonces, nuevamente. Cualquier otra duda que les surja. Un fuerte aplauso para Mauricio. Gracias.