{"id":4136,"date":"2025-03-12T12:45:02","date_gmt":"2025-03-12T11:45:02","guid":{"rendered":"https:\/\/davidperezgar.com\/?p=4136"},"modified":"2025-06-22T18:28:26","modified_gmt":"2025-06-22T16:28:26","slug":"crea-tu-propio-plugin-para-wordpress-desde-cero-o-ya-sabiendo-algo","status":"publish","type":"post","link":"https:\/\/davidperezgar.com\/es\/crea-tu-propio-plugin-para-wordpress-desde-cero-o-ya-sabiendo-algo\/","title":{"rendered":"Crea tu propio plugin para WordPress, desde cero o ya sabiendo\u00a0algo"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Ponentes:<\/strong> Francisco Torres, Paco Marchante y yo, David P\u00e9rez<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tuvimos la oportunidad de estar en la WordCamp Madrid 2025 compartiendo un taller donde ense\u00f1amos a crear un plugin en WordPress desde cero. La idea era hacerlo sencillo, din\u00e1mico y adaptado al nivel de cada persona en la sala, as\u00ed que lo planteamos como un paso a paso pr\u00e1ctico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agradezco a <a href=\"https:\/\/www.hostinger.com\/es\" target=\"_blank\" rel=\"noopener\">Hostinger<\/a> por patrocinar mi tiempo de contribuci\u00f3n en el equipo de WordPress Review Team.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfPor qu\u00e9 est\u00e1is aqu\u00ed?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Empezamos con una pregunta al p\u00fablico: \u00bfQui\u00e9n ha creado un plugin alguna vez? \u00bfQui\u00e9n tiene uno publicado en el directorio? Hubo algunas manos arriba, pero muchos ven\u00edan con ganas de aprender. As\u00ed que bajamos el nivel y arrancamos desde lo m\u00e1s b\u00e1sico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Primer Paso: \u00bfQu\u00e9 es un Plugin y C\u00f3mo se Publica?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Un plugin es b\u00e1sicamente una pieza de c\u00f3digo que a\u00f1ade funcionalidad a WordPress sin tocar su n\u00facleo.<\/li>\n\n\n\n<li class=\"\">Explicamos c\u00f3mo funciona el equipo de revisi\u00f3n de plugins, del que formamos parte, y mencionamos que se revisan unos 35 plugins al d\u00eda.<\/li>\n\n\n\n<li class=\"\">Tambi\u00e9n repasamos las reglas b\u00e1sicas que debe cumplir un plugin para ser aceptado en el directorio.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Segundo Paso: Creando el Plugin con WordPress Playground<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">En lugar de complicarnos con entornos de desarrollo, usamos <strong>WordPress Playground<\/strong>, una herramienta que permite crear un WordPress en el navegador sin instalar nada.<\/li>\n\n\n\n<li class=\"\">Explicamos c\u00f3mo guardar los cambios y trabajar con <strong>Blueprints<\/strong>, que nos permiten personalizar la instalaci\u00f3n con plugins y configuraciones predefinidas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tercer Paso: Haciendo que el Plugin Funcione<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Creamos el plugin en directo, explicamos c\u00f3mo organizar los archivos y escribimos el c\u00f3digo b\u00e1sico.<\/li>\n\n\n\n<li class=\"\">Hablamos de <strong>Hooks<\/strong>, diferenciando entre <strong>Actions<\/strong> y <strong>Filters<\/strong>, y c\u00f3mo usarlos para modificar WordPress sin tocar su c\u00f3digo.<\/li>\n\n\n\n<li class=\"\">Tambi\u00e9n explicamos la importancia de la <strong>sanitizaci\u00f3n y escape de datos<\/strong> para evitar problemas de seguridad.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfY Ahora Qu\u00e9?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">El plugin ya estaba hecho, pero \u00bfqu\u00e9 m\u00e1s? El p\u00fablico quer\u00eda m\u00e1s. As\u00ed que hablamos de c\u00f3mo publicarlo en el directorio de WordPress y qu\u00e9 revisar antes de enviarlo.<\/li>\n\n\n\n<li class=\"\">Tambi\u00e9n dimos algunos trucos sobre nombres de plugins, dependencias y buenas pr\u00e1cticas.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-incrustar-wordpress-tv wp-block-embed-incrustar-wordpress-tv wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"VideoPress Video Player\" aria-label=\"VideoPress Video Player\" width=\"500\" height=\"281\" src=\"https:\/\/video.wordpress.com\/embed\/MRhgdbmY?hd=1&amp;cover=1\" frameborder=\"0\" allowfullscreen allow=\"clipboard-write; presentation\"><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1790791280'><\/script>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Cierre y Preguntas<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El p\u00fablico se anim\u00f3 a preguntar de todo, desde c\u00f3mo evitar errores comunes hasta c\u00f3mo adaptar WordPress Playground para probar proyectos reales. Fue un taller muy interactivo y divertido, y nos encant\u00f3 compartirlo con la comunidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Nos vemos en la pr\u00f3xima WordCamp! \ud83d\ude80<\/p>\n\n\n\n\n\n<button class=\"gb-button gb-button-aa73bcae gb-accordion__toggle\" id=\"gb-accordion-toggle-aa73bcae\"><span class=\"gb-button-text\">Transcripci\u00f3n<\/span><span class=\"gb-icon\"><\/span><\/button>\n\n\n\n\n<p class=\"wp-block-paragraph\">[M\u00daSICA] Tengo el gran placer de presentaros a Francisco Torres, a David Perez y Paco Marchante. Francisco Torres participa en la comunidad desde hace ya casi dos a\u00f1os, contribuye en el equipo de revisi\u00f3n de plugins de WordPress. Trabaja como desarrollador. Es Andaluz de Gran\u00e1. Exactamente. Le gusta el ciclismo, la nataci\u00f3n, las tostadas con tomate y aceite. Aunque bueno, los chorros tampoco est\u00e1n nada m\u00e1s. Tambi\u00e9n tenemos a David Perez, que participa tambi\u00e9n en el equipo de revisi\u00f3n de plugins desde 2023. Tiene adem\u00e1s una agencia de marketing y desarrollo basado en WordPress. Me encanta el c\u00f3digo limpio, las buenas pr\u00e1cticas y cuando nieva, pues sube corriendo a Sierra Nevada a practicar el esqu\u00ed de fondo. Adem\u00e1s, tambi\u00e9n organiza una carrera solidaria en Granada, en memoria de su padre. Y bueno, tambi\u00e9n tenemos a Paco Marchante, que es desarrollador senior full stack con m\u00e1s de 8 a\u00f1os de experiencia en CMS. WordPress, Prestasov y otras plataformas similares. Tambi\u00e9n forma parte del equipo de revisi\u00f3n de plugins de WordPress.org. Ha sido organizador de las meetups oficiales de WordPress desde 2018 en C\u00e1diz y Chiclana. Y tambi\u00e9n organizado eventos como la Workup de Chiclana desde 2020. Workup Spain, tambi\u00e9n desde 2020, entre otros. Y bueno, adem\u00e1s ha sido ponente de distintos eventos. As\u00ed que bueno, yo dejo de enrollarme ya y os dejo a ellos buenas manos. Un fuerte aplauso, por favor. [APLAUSOS] Bueno, y por qu\u00e9 tanta gente aqu\u00ed? Es que, bueno, hoy lo que vamos a ense\u00f1ar en estas dos horas, lo siento, son dos horas, es un poquito larguito. Pero bueno, esperemos que todo auguste y tal. Vamos a ense\u00f1ar c\u00f3mo crear un plugin. Y vamos a empezar directamente, porque es que esto ya vamos a no perder tiempo, cuanto antes lo tengamos hecho, pues ya est\u00e1. Entonces, el primer paso, porque esto en tres pasos se puede hacer un plugin. Entonces vamos a ense\u00f1arlo as\u00ed. Esto a ver por d\u00f3nde tiene, es que cada estrope\u00f3n no es m\u00edo, donde est\u00e1n navegados. Mira, aqu\u00ed entramos en chat GPT, paso uno. \u00bfVale? Bueno, y a paso 2. Claro, el paso 2 bueno utilizando tecnolog\u00eda de \u00faltima generaci\u00f3n, \u00bfvale? Como es la Inteligencia Artificial, \u00bfvale? S\u00f3lo tenemos que escribir un texto simple. \u00bfT\u00fa qu\u00e9 quieres hacer? Un plugin, yo quer\u00eda hacer un plugin. Ah, vale, no lo he dicho que sea, \u00bfeh? Cr\u00e9ame un plugin, \u00bfvale? \u00bfDe qu\u00e9 quiere ir el plugin? \u00bfDe qu\u00e9 lo quiere ir? No s\u00e9. Oye, un plugin. S\u00ed, s\u00ed, s\u00ed. \u00bfQu\u00e9 te pongas los metat\u00edteles? No s\u00e9 qu\u00e9. Keyboards, que hay boards. Meta keyboard. Keyboard. Word. Joder, qu\u00e9 palabras. En las entradas, \u00bfno? A m\u00ed mismo. En la entrada, claro. Es optimista, sobre todo las keywords, \u00bfeh? Es que si no, si no las pon\u00e9is. Y tiene que decirle que es en WordPress. \u00bfHe escuchado que no se utiliza? No. Yo qu\u00e9 s\u00e9. Ya, ya. Pero m\u00e1s all\u00e1, el t\u00edtulo. S\u00ed, s\u00ed. \u00bfSe ha dicho el t\u00edtulo? Claro. Vale. Que tambi\u00e9n es t\u00edtulo. Es el t\u00edtulo. \u00bfS\u00ed? Vale, pues ahora-- Venga, voy a darle ley. Venga. \u00bfTec\u00e9s paso, no? No, s\u00ed. Ahora va, tercer paso. Al tercer paso. Al final, es el paso m\u00e1s importante, \u00bfeh? S\u00ed, s\u00ed. Me hab\u00e9is dejado para hacer. S\u00ed, s\u00ed. \u00bfY ya est\u00e1? Bueno, ya no est\u00e1 escribiendo. Ah\u00ed est\u00e1. Lo est\u00e1s generando. Se ve bien, \u00bfno? Bien. Bueno, ah\u00ed est\u00e1. \u00bfMe tiene meta aqu\u00ed igual? Ya est\u00e1. Ese es el c\u00f3digo del plugin. O sea, que ya est\u00e1 el plugin hecho. As\u00ed que, bueno, pues muchas gracias por todo. Gracias, Pedro. [APLAUSOS] Ah\u00ed se un p\u00fablico acolente. Saludos. Saludos. S\u00ed, s\u00ed. Oye, ha salido bien, \u00bfno? Ya hemos terminado. Ya esto. Ahora va la siguiente charla, \u00bfeh? Oye, Paco, creo que\u2026 S\u00ed, s\u00ed, s\u00ed. No, ya ten\u00e9s que ir por mi port\u00e1til. Sacra, ya he llegado a tarde. No, a ver, David, voy yo, lo recojo yo. \u00bfQu\u00e9 haces aqu\u00ed? Ya lo he terminado, ya. Estamos cansados. Ya hemos de ir. \u00bfQue siguen aqu\u00ed? Tambi\u00e9n. Pero, \u00bfquiere m\u00e1s cosas? Pero, \u00bfest\u00e1s en? No entiendo. \u00bfY si ya le hemos ense\u00f1ado a hacer un plugin, qu\u00e9 m\u00e1s? Claro. \u00bfUn PRO? \u00bfC\u00f3mo se creen que ese programa en 2025? Eso digo yo. Pero, \u00bfvosotros? \u00bfA qu\u00e9 hab\u00e9is venido? \u00bfQu\u00e9? \u00bfQu\u00e9? \u00bfPor qu\u00e9 es aqu\u00ed? O sea, \u00bfqu\u00e9 espera es que hagamos? Aparte de esto, no s\u00e9. \u00bfPublicarlo? Ah, publicarlo, bueno, bueno, mira, puede ser \u00fatil. David, \u00bfdile a esta GPT qu\u00e9 publica el plugin? \u00bfQu\u00e9 m\u00e1s preguntan una cosilla? Vamos a decir que lo publique. Bueno, y ya est\u00e1. La cosa es que ya no hemos preparado nada m\u00e1s. No, pues, yo qu\u00e9 s\u00e9, dile\u2026 No, le estoy diciendo que lo publique en www.warpers.org. Vale, vale, vale. Mira, ah\u00ed est\u00e1, enviar plugin para supervisi\u00f3n, en la p\u00e1gina de subida de plugins, pues no me d\u00e9 el plugin. Eso ya est\u00e1, eso ya est\u00e1 hecho, porque lo ha hecho todo. Y una vez enviados, suelen tardar entre 2 y 7 d\u00edas para probarlo bueno. Bueno. Bueno, no siempre, no siempre. Pero bueno\u2026 Es m\u00e1s r\u00e1pido. S\u00ed, s\u00ed, es verdad. Pero bueno, ya est\u00e1, s\u00ed, pues, ya est\u00e1. Si esta gente quiere m\u00e1s cosas, podremos m\u00e1s cosas. As\u00ed que, a m\u00ed, bueno, ya est\u00e1. Vamos a sentarnos aqu\u00ed, vamos a hacer algo. Quedan m\u00e1s sencillo. M\u00e1s sencillo que eso. Bueno. Despu\u00e9s de esta performa. Bienvenidos, se\u00f1ores, se\u00f1ores y se\u00f1ores y se\u00f1ores a este taller excelente para crear un plugin. Que va a ser todo adaptado a vosotros, porque realmente vamos a ver qu\u00e9 sabe cada persona, qu\u00e9 necesidades ten\u00e9is. Y estamos tres personas. Por eso estamos tres, porque para poder dividirnos gente que tenga menos conocimiento de programaci\u00f3n, gente que tenga m\u00e1s y adaptarnos a cada caso. Y bueno, vamos a empezar present\u00e1ndonos un poquito, aparte de lo que ya ha comentado el compa\u00f1ero. Pues yo mismo que estoy hablando, pues soy Francisco Torres. S\u00ed que realmente creo que nos presentamos los tres al mismo tiempo un poco, porque los tres estamos en el equipo de plugins de volpes.org. Somos de las personas que revisamos los plugins que se suben al d\u00eda de estudio. Y quer\u00edamos hacer este taller. En todas las cosas, porque lo hicimos en Sevilla y sali\u00f3 bien. Goto mucho. Y sobre todo para ense\u00f1ar a gente c\u00f3mo hacer un plugin y que ese plugin pueda formar parte luego del repositorio o el directorio de WordPress. En el directorio hay unos 60.000 plugins. Pero como comentamos ayer, pues 60.000 uno, pues est\u00e1 bien. Al fin y al cabo, yo considero que contribuir con un plugin a la comunidad es una forma de contribuir a WordPress. As\u00ed que bueno, es algo que pod\u00edas hacer. Claro, a ver, yo creo que tambi\u00e9n tendr\u00edamos que empezar un poquito bajando totalmente el nivel a ver si alguien no sabe que es un plugin que puede pasar. No hace un par de preguntillas, \u00bfno? Claro, las t\u00edpicas preguntillas. Oye, alguien no ha programado nunca, nunca ning\u00fan plugin para WordPress, el levant\u00e9 la mano. \u00bfY alguien tiene un plugin subido en el repositorio? \u00a1Oh, nada mal! Pero el resto tiene que publicar el plugin. Y el resto hay programas plugins, por lo que estoy entendiendo, \u00bfno? \u00a1Y s\u00ed, s\u00ed, s\u00ed, s\u00ed! O dedica a WordPress activamente con c\u00f3digo o otra materia. Vale. Aqu\u00ed, sobre todo, como comentaba Frank y David, vamos a ver un repaso entero desde la creaci\u00f3n de plugins, desde los puntos b\u00e1sicos hasta los puntos m\u00e1s avanzados. Como somos 3, nos podemos dividir y podemos hacer una ense\u00f1anza m\u00e1s activa, no solo aqu\u00ed viendo la pantalla. Y bueno, \u00bfcu\u00e1nto de ustedes tambi\u00e9n tiene importate? Le pasa aqu\u00ed la sesi\u00f3n y dem\u00e1s. \u00bfS\u00ed, hay importate? S\u00ed, porque realmente la idea es que sea un poco taller, que tenga ese port\u00e1til que hag\u00e1is, s\u00e9 que ten\u00e9is poco espacio disponible para poner el port\u00e1til, pero bueno, lo pod\u00e9is poner entre las piernas, luego se oscalienta los cachetes. No, no, ten\u00e9is una mesa. Ya, pero la mesa es\u2026 No, no, no, pero la segunda fiel es tan bien. Ah, la mesa, eh. Bueno, lo que te dices te me da si quer\u00e9s pasar a la segunda. Normalmente no s\u00e9, dice, todas las charlas, pero si hay mejoras mesas, sent\u00edos libres de pasado. Claro, sobre todo tambi\u00e9n comprender el tema de\u2026 Bueno, \u00bfqu\u00e9 es un plugin, claro? Aqu\u00ed tenemos la definici\u00f3n textual de qu\u00e9 es un plugin. Claro, esta es la definici\u00f3n textual de qu\u00e9 es un plugin. Afinar es algo que hace diferente o que te a\u00f1ade a Word. Lo m\u00e1s popular es el de Tienda Online, que crea una Tienda Online con un plugin y a partir de ah\u00ed puedes tener formas de pago, formas de env\u00edo, con plugin aparte. Al final a\u00f1ade una funcionalidad, de hecho lo que comenta David en el directorio cuando nosotros revisamos plugins que estamos recibiendo del orden de 30, 40 al d\u00eda era. 35 al d\u00eda. S\u00ed, s\u00ed, pues imaginado, eh, 25 al d\u00eda. Por ejemplo, muchos llegan de pasaderas de pago para para integrarse con Bookomers, y bueno, llegan de muchos tipos en realidad, \u00bfno? Pero la cosa es, fijaos, si hay cosas, integraciones y gente que piensa cosas distintas, o distintas integraciones con distintas cosas, por el final ya se integra todo con todo, para 35 nuevas ideas de plugins cada d\u00eda. Es verdad que algunas veces son repetidas la idea, pero\u2026 Hay gente que no es original. Oye, pero \u00bfqu\u00e9 es esto del equipo de revisi\u00f3n de plugins? \u00bfQu\u00e9 es el equipo de revisi\u00f3n de plugins? \u00bfQu\u00e9 es el equipo de revisi\u00f3n de plugins? \u00bfQu\u00e9 hace el equipo de revisi\u00f3n de plugins? \u00bfQui\u00e9n no sabe? \u00bfO qui\u00e9n se sabe? Claro, es muy f\u00e1cil. \u00bfPero por qu\u00e9? El por decir \"revisi\u00f3n plugins\". Es bueno. \u00bfPor qu\u00e9 se aprecie? Porque se podr\u00eda subir el plugin, y bueno, la hemos subido, y se descarga mucho usuario. \u00bfPor qu\u00e9 hay personas detr\u00e1s, y manualmente, revisando el c\u00f3digo? Al final es un poco\u2026 para que haya cierto control en lo que se publica, y sobre todo hay tres cosas que son claves. Seguridad, compatibilidad y cumplimiento de las normas del directorio. Hay unas ciertas normas que al final acabo de hacer, que sea software libre y que no haga nada malo, y luego es s\u00faper importante que sea seguro. Que sepamos que ese plugin, si se instala en un sitio WordPress, que el sitio no vaya a ser hackeado en tres segundos. Entonces, por eso se hacen estas revisiones, y ese contior tambi\u00e9n posterior, cuando ya est\u00e1 publicado. La base de los plugins, bueno, hay un handbook gigante, que os animo a que lo conozc\u00e1is, porque se aprenden much\u00edsimas de desarrollo. Y dentro de aqu\u00ed hay una secci\u00f3n, que es la que hac\u00eda un poco\u2026 una referencia a \u00e9l, la directiva o lo guidelines, para poder publicar tu plugin. Vamos a ver un poquito\u2026 Esgeramente. Esa es la norma que tiene que cumplir cualquier plugin, que es que la hay publicar dentro del repositorio, para ser hackeado. Esa son las normas b\u00e1sicas que tiene que cumplir, ya aparte de que est\u00e9 bien programado. O peor, bueno, que cumpla con un m\u00ednimo de seguridad, y dem\u00e1s que, bueno, para eso ya tambi\u00e9n est\u00e1 el equipo nuestro, que revisa uno a uno todos los plugins que se suben, se intentan publicar, hacen la petici\u00f3n de publicaci\u00f3n, dentro del repositorio, y todo esto se revisa uno a uno por un voluntario, \u00bfvale? Luego repasaremos tambi\u00e9n cu\u00e1les son los errores m\u00e1s b\u00e1sicos, los errores m\u00e1s b\u00e1sicos, los que repiten son los m\u00e1s comunes, pero con esto digo una cosa, no ray\u00e9is. Yo creo que todos nosotros, estos errores los comet\u00edamos a diarios, hasta que entramos tambi\u00e9n en el equipo, donde aprendes. Yo creo que el mayor exponencial de aprendizaje fue tambi\u00e9n cuando entramos, por eso no os preocup\u00e9is si comet\u00e9is estos errores, porque son errores que cometemos todo el mundo a diario, \u00bfvale? Bueno, en poco a poco ir\u00e1n montrando materia, pero b\u00e1sicamente las mayores directrices de seguridad es cuando en nuestras funciones recibimos informaci\u00f3n o sacamos informaci\u00f3n que pasen por un proceso de sanitizado o de escapado, \u00bfvale? Eso es, digamos, las dos m\u00e1s importantes para que, digamos, no recibamos codidos maliciosos y los ejecutemos y bueno, y al hacer r\u00e9cord los ejecutemos, entonces estamos sirviendo a los usuarios codidos maliciosos que estamos creando. Para todo esto, \u00bfvale? Ten\u00edamos pensado mostrar primeramente WordPress Playground, porque todo el mundo tiene un entorno de desarrollo, y vamos a ense\u00f1ar tambi\u00e9n un poco Playground, que es una herramienta que os va a servir much\u00edsimo, ya no solo para la hora de desarrollar, sino tambi\u00e9n a la hora de realizar presentaciones a clientes o hacer cualquier tipo de testing, de c\u00f3digo, de cualquier plugin o c\u00f3digo que no lo quer\u00e1is meter directamente en vuestro equipo, \u00bfvale? Hay una charla de Playground a las 12 y media, as\u00ed que ya no ten\u00e9is ning\u00fan motivo para ir de aqu\u00ed. No, es que la ten\u00e1s cuidado. a que directamente la\u2026 \u00bfd\u00f3nde ac\u00fastela? Encuentra. Ya weonchado una primera. Se van a chalar de playground. \u00bfPor qu\u00e9? \u00bfPor qu\u00e9 nos haces esto? A ver, no s\u00e9\u2026 Bueno, mientras que no conozcas qu\u00e9 es playground\u2026 \u00bfc\u00f3mo lo explicamos? Es magia. Toda esta historia de\u2026 cuando te dec\u00eds, vamos a montar un sitio web en WordPress. Y empezamos con el reorrollo MySQL, el IPHP, no s\u00e9 qu\u00e9\u2026 \u00a1puf! \u00a1qu\u00e9 cansado eso! Pues playground es un WordPress que se ejecuta en tu navegador. Y t\u00fa haces as\u00ed, \u00a1pum! y aparece un WordPress y dice \u00bfd\u00f3nde aparece el WordPress? Y el WordPress lo tiene en tu ordenador, te lo han metido, te lo han inyectado en WordPress y se ejecuta desde tu ordenador. Y haciendo un peque\u00f1o proceso puedes hacer que los archivos de ese WordPress se guarden en una carpeta de vuestro ordenador. As\u00ed que cualquier cosa que cambi\u00e1is, ah\u00ed se aplica en el WordPress. Es verdad que tiene algunas peque\u00f1as limitaciones, con algunas cosas, hay algunas cosas que no funcionan, pero la mayor\u00eda s\u00ed. Vale, esto que veis en pantalla ahora mismo ya ser\u00eda WordPress Playground, \u00bfvale? Para saber es muy, muy, muy sencillo, lo \u00fanico que tenemos que buscar. WordPress Playground en Google y va a salir el primero o el segundo, \u00bfvale? Es s\u00faper sencillo, igualmente la URL es playground.wordpress.net, no .rg, \u00bfvale? .net, porque .net es el saco de pruebas de la comunidad, \u00bfvale? Aqu\u00ed donde en .net hay un mont\u00f3n de proyectos que se est\u00e1n desarrollando, que se est\u00e1n haciendo pruebas. Y ahora mismo tambi\u00e9n es donde se aloja WordPress Playground. Tambi\u00e9n Playground lo pod\u00e9is ver cuando ve\u00e1is un plugin en el director de plugin, que es el Live Preview. Eso lo que hace es que monta un Playground con el plugin que est\u00e1s viendo. Esto tambi\u00e9n es muy \u00fatil para probar plugins sin tener que\u2026 Porque muchos plugins crean tablas o crean modifican base de datos, justo al activarlo. Entonces, puede ser muy interesante para probarlo y no ensuciar tu web, usar Playground para ello. Vale, con Playground como est\u00e1is viendo, ahora ya ten\u00edan, digamos, una instalaci\u00f3n de WordPress totalmente funcional. O sea, esto est\u00e1 corriendo ya directamente en navegador, \u00bfvale? No tengo nada descargado, no tengo nada. No activa ning\u00fan servidor Apache ni en MySQL, \u00bfno? Yo no activa nada. O sea, si cre\u00ed o lo ense\u00f1o, pero aqu\u00ed\u2026 Mira\u2026 Yo aqu\u00ed no tengo\u2026 \u00bfC\u00f3mo era aqu\u00ed? En Forzad\u2026 Forzad\u2026 Forzad Salida, para que ve\u00e1is que no estoy enga\u00f1ando, \u00bfeh? Aqu\u00ed yo no tengo nada. El Spotify y el OnePower para que me recuerda la contrase\u00f1a y poco m\u00e1s. Vale, esto est\u00e1 directamente en el navegador, \u00bfvale? \u00bfC\u00f3mo se llama\u2026 con WebAssembly, \u00bfno? WebSuppers, \u00bfno? WebAssembly\u2026 La tecnolog\u00eda est\u00e1 detr\u00e1s de la webSuppers. Claro, y bueno, esto directamente es una tecnolog\u00eda que nos permite ejecutar c\u00f3digo directamente en los navegadores. En este caso ya se est\u00e1 desarrollando con PHP y SQLite, \u00bfvale? Que por eso todo el proyecto de WordPress que se estaba haciendo con SQLite era sobre todo para poder implementar Playground, \u00bfvale? Aqu\u00ed tendremos una instalaci\u00f3n totalmente funcional, \u00bfvale? Os voy a dar unos peque\u00f1os consejos s\u00faper r\u00e1pidos, porque es lo primero que os va a romper un poco, da un error, \u00bfvale? Que es que cuando queramos instalar un plugin, aparte de el Odoli que viene siempre, \u00bfvale? Os va a dar este error, \u00bfvale? Que est\u00e1 diciendo que es que no tenemos conexi\u00f3n fuera, o sea, no tenemos conexi\u00f3n a Internet, voy a hacer un poco de zoom para que se vea igualmente. Ya estamos aburriendo un poco, \u00bfvale? Pero bueno, se os fij\u00e1is, \u00bfvale? Si lo leemos, igual que la inform\u00e1tica, la inform\u00e1tica es 90% le lo que pone en pantalla, \u00bfvale? Que es que\u2026 Seguir las instrucciones. El problema es que nos hacemos los listos y nos queremos leer. Esto ahora mismo no tendr\u00edamos conexi\u00f3n a Internet y es s\u00faper sencilla arreglar. O ponemos esto en el JSON, \u00bfvale? Que ahora os lo explicar\u00e9. O nos vamos aqu\u00ed, \u00bfvale? Donde por usarlo. Lo vuelvo a repetir por si no se ha visto en este bot\u00f3ncito de aqu\u00ed. Pas\u00f3 la acci\u00f3n del Playground que est\u00e1 cargando en el momento. \u00bfVale? Por cierto, que nos teng\u00e1is importante y pod\u00e9is seguir el proceso porque esto os va\u2026 O sea, pod\u00e9is usar esto ahora para desarrollar el plan. Claro, hasta en el m\u00f3vil podr\u00eda hacerlo. O sea, el Warp Playground se va a abrir en el navegador, pero en cualquier navegador, \u00bfvale? Y aqu\u00ed lo guay que pas\u00e9 testing y pas\u00e9 presentaciones a clientes y dem\u00e1s, es s\u00faper \u00fatil, m\u00e1s que nada porque podemos configurar Warp como queramos. \u00bfVale? \u00bfC\u00f3mo activo eso? O\u00edr\u00e1, aqu\u00ed tengo la opci\u00f3n de permitir la conexi\u00f3n a la red y ahora lo \u00fanico tendr\u00eda que aplicar y resetear Playground. Playground se est\u00e1 borbiendo a cargar, est\u00e1 gener\u00e1ndome de nuevo ese WordPress, \u00bfvale? Est\u00e1 regenerando entero, o sea, est\u00e1 generando otra instalaci\u00f3n con estas opciones. Entonces, ya cuando me vaya aqu\u00ed a plugin la tema, ya voy a poder encontrar, \u00bfvale? Me voy a\u00f1adiendo nuevo y ya tengo conexi\u00f3n a Internet, \u00bfvale? Y ya podr\u00edamos hacer instalaciones de cualquier tipo de plugin, o sea, podemos instalar el que quer\u00e1is, \u00bfvale? \u00a1Paco, pero esto cuando cierre el navegador se pierde! Claro. \u00bfPero qu\u00e9 no? Yo no me sirve de nada. No me sirve. Bueno, es que le hago. No lo quiero. Ni que yo lo hubiera inventado. (risas) Claro, vamos a dar un poco la demostraci\u00f3n, pues el Aqinme, \u00bfno? O sea, el Clasy Editor que quer\u00e1is, podemos instalar cualquier plugin. Mira, activo este, \u00bfvale? Aqu\u00ed lo tenemos. Entonces, si yo recargo, me cargo la instancia. \u00bfVale? Es la memoria del navegador. O sea, creo que era cuando recargaba. \u00bfLo ves? Me cargaba. O sea, ya es otro WordPress totalmente nuevo, \u00bfvale? Eso tenerlo en cuenta. Cuando recarg\u00e1is es un WordPress totalmente nuevo. O sea, regeneraba, ah\u00ed es una instalaci\u00f3n nueva y ha montado todo. Ojal\u00e1 hubiera una forma de evitar eso. Pues la hay. \u00bfC\u00f3mo? S\u00ed. Con WordPress Playground y su memoria podr\u00e1s tener tu WordPress guardadito aqu\u00ed todas las veces que quieras. \u00a1Oh, eso es muy bonito, Paco! \u00a1S\u00ed! \u00a1All right! Es s\u00faper sencillo guardarlo, \u00bfvale? Le damos los tres puntitos, \u00bfvale? Y lo podemos descargar, \u00bfvale? Ah, incluso lo podemos guardar. Pero ahora no me sale la opci\u00f3n porque no yo nada todav\u00eda. Entonces, por eso tengo primero\u2026 Ah, bueno, s\u00ed, es que est\u00e1 ah\u00ed. Es que nunca lo veo. Ha cambiado. Ha cambiado mucho la interfaz. Claro. Va cambiando. La hab\u00e9is visto vosotros antes que yo. Vale, porque antes estaban en los tres puntitos, \u00bfvale? Pero aqu\u00ed, cuando hag\u00e1is cualquier cambio, cualquiera, ya va a salir aqu\u00ed de\u2026 Esto es un\u2026 Os avisa que es una instancia temporal de Playground. Otra vez que le es, \u00bfno? Es lo que nos dice. Claro, claro. Es que\u2026 \u00bfQu\u00e9 me ha pasado? Que yo he ido delito y no he le\u00eddo lo que pon\u00eda, \u00bfvale? Entonces, si nos vamos aqu\u00ed, ya est\u00e1 diciendo que, oye, si quieres guardarlo, pod\u00e1lelo al bot\u00f3n. Y lo podemos guardar. O en el navegador, \u00bfvale? O en nuestro local. Si lo guardamos en nuestro local, lo potente de esto es que nos va a crear toda la instalaci\u00f3n de WordPress, o sea, toda la estructura de carpetas y que podemos hacer con todos los directorios, pues lo abrimos en Visual Studio Code y podemos empezar a desarrollar como si fuera un entorno de desarrollo. Pero lo potente es que no vamos a tener ni apalles donde necesitamos un servidor local. Muy gusto. Y t\u00fa vas abajo, porque cuando no estamos en un portal general nuestro, pues nos permite ah\u00ed estamos haciendo, por ejemplo, grabar los archivos a la carpeta local. Es s\u00faper \u00fatil para hacer talleres de creaci\u00f3n de plugins. S\u00ed, ah\u00ed est\u00e1. Oye, mira, si est\u00e1 un taller de creaci\u00f3n de plugins. Vale, y aqu\u00ed voy a intentar llamar algunas opciones de m\u00e1s, \u00bfvale? Como voy a borrar esta instancia completa y dem\u00e1s. Y bueno, aqu\u00ed ya podemos hacer lo que queramos. Lo bueno de Playground, que todo esto se genera con unos JSON que se llaman Blueprints, como lo han llamado, y le podemos dar a verlo. Y aqu\u00ed tenemos el c\u00f3digo de todo este, esta instancia de WordPress. Aqu\u00ed podemos poner instalaci\u00f3n de plugin, instalaci\u00f3n de tema y podemos preparar una instancia completa con nuestro, con el WordPress que queramos. \u00bfEl plugin que normalmente usas? S\u00ed, claro, claro. Si tienes tu Blueprints guardado, lo pegas y ya autom\u00e1ticamente inicia la sesi\u00f3n con los plugins que t\u00fa quieras. Esto tambi\u00e9n es muy \u00fatil para hacer testing. Vale, los nuevos testing unitarios que se hacen en los plugins se utilizan por debajo o Playground. Entonces es m\u00e1s f\u00e1cil porque los plugins siempre se utilizan con WordPress limpios para que no entre en conflicto con otros plugins. Claro, y lo bueno que esto, que no solo ten\u00e9is que limitar a lo que es tema de los plugins de repositorios y que no, que pod\u00e1is poner cualquier plugin que est\u00e9 en una URL p\u00fablica. O sea, vuestros hijas, cualquier cosa pod\u00e9is ponerlo. Entonces, imaginarse ten\u00e9is toda la instancia de un cliente y si quer\u00e9is hacer una demo lo pod\u00e9is hacer perfectamente con esto. En la empresa donde hay trabajo tenemos un sistema ya automatizado donde estamos con Playground, haciendo demos a los clientes con pr\u00e1cticamente la web de ellos porque tambi\u00e9n pod\u00e9is poner automatizaci\u00f3n de contenido, automitaci\u00f3n de p\u00e1gina, de creaci\u00f3n. Entonces, el momento de que lanz\u00e1is el Blueprint, te crea una instancia completa de WordPress con todo el contenido y todas las cosas que quer\u00e1is. De hecho, Blueprint se usa tambi\u00e9n mucho para cuando vaya a publicar un plugin en el director de plugins. Ese LivePerview, bueno, hubo un tiempo que se activ\u00f3 por defecto, pero ya no ahora tienes que activarlo t\u00fa. Tienes que dejar un archivo en la carpeta de Asset. Y, por ejemplo, si ahora es un plugin que necesita Google Comer, pues digamos que utiliza un elemento o cualquier otro plugin, utilizar los pasos para que te deje la instalaci\u00f3n al usuario como quer\u00edas que te gustara. A ver si ten\u00e9is alguna duda y preguntando. Mira, tenemos una duda. Esp\u00e9rate, esp\u00e9rate, el micro. S\u00ed, s\u00ed, para que te hayas grabado. Claro, para que se grabe. S\u00ed, s\u00ed. Para que haya poterlo luego. No, yo os quer\u00eda preguntarse si existe, por ejemplo, la opci\u00f3n de exportar ya una instalaci\u00f3n que tengamos ya hecha con plugins y con temas del cliente a un archivo as\u00ed para reutilizarlo. Mira, es una buena idea para un plugin. Hace un plugin. Claro. Mira, as\u00ed que\u2026 Claro, m\u00e1s que nada, si ya quieres partir de algo que ya est\u00e1 hecho y quieres probar pues eso, una actualizaci\u00f3n en la web del cliente. Tambi\u00e9n en el Blueprint puedes meter URL exacta, que se las descarga Wordp en ese momento y puedes hacer plugin extend o cualquier otro tipo. Entonces no se puede descargar algo que ya\u2026 Un Wordp es completo. No, s\u00ed, yo entiendo que lo vas a poder hacer a mano. Vale. O sea, de tipo de que si est\u00e1s a la Playground con tu directivo de locales y luego metes ah\u00ed los archivos y luego importas la base de datos, pues entiendo que pod\u00e9s llegar a hacerlo. Vale. Pero no s\u00e9 si\u2026 Seguramente puede que haya un plugin que tenga para hacer eso. Por ejemplo, alg\u00fan plugin de backup que permita importar a la Playground. A ver, Automatic Studio, que es el software que han sacado de local para\u2026 Est\u00e1 basado en un Playground realmente y permita tener instalaciones de Wordp en local y te puedes instalar la base de datos, los plugins y todo. O sea, quedan como paquetizadas para que puedas usarlo. Vale. Claro, la forma f\u00e1cil tambi\u00e9n es montar toda la instancia aqu\u00ed y los portas. Porque una vez que nosotros vamos instalando plugin, que es lo que est\u00e1s haciendo, ahora yo esto puedo descarg\u00e1rmelo, exportarlo a GitHub directamente o ver el blueprint de lo que he creado. Vale. Estos aqu\u00ed no podemos hacer todo. Vale. Lo pasa, tienes que ir guardando la instancia para que se vaya generando el blueprint, sino no se genera. Igualmente aqu\u00ed, si te fijas, vamos teniendo todo el JSON que se va montando. Igualmente hay un mont\u00f3n de ejemplos aqu\u00ed. Si vas aqu\u00ed en GitHub que lo ten\u00edan mordemos. O te vas aqu\u00ed y aqu\u00ed hay un mont\u00f3n de demos ya montadas por el equipo de Playground. Para usar blueprint. Esto ya te digo, esto utilizado y automatizado para afinar una cadena de JSON. Puedes montar con un poco de c\u00f3digo, puedes montar aqu\u00ed automatizadores de\u2026 De hecho el JSON tiene steps. Tienes como steps, pasos o pasados, puedes incluso decir que, por ejemplo, quieres que directamente cuando se instale ese plugin, pues que vaya a la p\u00e1gina de ajuste de configuraci\u00f3n, le puedes especificar donde quiera que vaya. Y aparte te puedes lanzar tambi\u00e9n c\u00f3digo PHP, o sea, tiene un comando de run PHP y puedes emitir c\u00f3digo. O sea, es muy \u00fatil para hacer demos. Vale, vale. Es otro que hace Playground, por ejemplo, es bastante interesante. Muy bien. Pues muchas gracias. Entonces Paco, entonces t\u00fa tienes el Playground que es como un espec\u00edfico entorno local, pero como hago yo un plugin, \u00bfd\u00f3nde encuentro yo los archivos de WordPress? O sea\u2026 Vale, pues a ver, lo que podr\u00edamos hacer es descargar este Playground, pero vamos a descargarlo local. Ya lo tenemos en el navegador, \u00bfvale? Pero est\u00e1s subiendo un zip todo el rato y dem\u00e1s, es un poco tedioso y dem\u00e1s. As\u00ed que lo que hacemos es descargarlo a lo que es un\u2026 Un director local. Ah\u00ed est\u00e1. S\u00ed, pero lo tienes inclinizado ya con un directorio, \u00bfno? S\u00ed, a ver, \u00bfno? Ah, claro, pero claro, este directorio lo hemos guardado directamente en navegador. En navegador, \u00bfno? Ah\u00ed est\u00e1. Vale. Que no est\u00e9 en eso. Y en vez de hacer lo que hemos hecho antes, de guardarlo en el navegador, pues vamos a guardarlo en un directorio local. Y aqu\u00ed\u2026 Puedes ver con las carpetas\u2026 Le vamos a apacar todo el archivo. Uuuuh\u2026 No, el refierta no lo toque. \u00bfQu\u00e9? El refierta no lo toque. Que sea el m\u00e1s peligroso. Uuuuh\u2026 No, no, creo que no tengo nada. Bueno, no tienta la suerte. Y vamos a hacer una carpeta nueva, \u00bfvale? Warp Pre. Ah\u00ed est\u00e1. Vale, seleccionamos. \u00bfQu\u00e9 te pasa? Te voy a pedir una foto. Ah, s\u00ed. Y ya me est\u00e1s creando toda la estructura de carpeta de Warp Pre, \u00bfvale? Que necesita playground para ir funcionando. Esto puede tardar m\u00e1s o menos. Pero no es lo que es, es verdad que los Windows, como los directos, como funciona el administrador de archivos de Windows, va un poco m\u00e1s lentillo, que Linux o Mac, s\u00ed que es verdad que lo que vimos en anteriores talleres puede tardar un poco m\u00e1s. Pero no os preocup\u00e9is que esto va creando solo, \u00bfvale? Igualmente, ya me ha dicho que lo tiene. Aqu\u00ed est\u00e1 Solito Warp Pre. Y si os fij\u00e1is\u2026 \u00bfPuedo darles m\u00e1s zoom? No. A ver\u2026 \u00bfPuertemente ser\u00e9, no? No, a menos. Claro que no estoy mintiendo. Aqu\u00ed ya tenemos un Warp Pre creado, \u00bfvale? Y este Warp Pre est\u00e1 conectado directamente con el playground de antes. Entonces, ahora mismo ya tengo un entorno de desarrollo. O sea, que as\u00ed es decir\u2026 No, es que es un cominuto. Vamos a tardar m\u00e1s de explicar lo Paco, pero que lo explico a m\u00ed no te\u2026 Pero porque nos enrollamos un mont\u00f3n, no, por eso. No, por eso. A ver, ahora en Visual Studio\u2026 Visual Studio, \u00bfo es que vosotros utilic\u00e9is, \u00bfvale? Hostia, as\u00ed me est\u00e1 actualizando el Visual Studio. Lo bien ofertaba. Nos f\u00edamos. A ver, voy a darle zoom. La vaya est\u00e1 confiado por la vida. Entonces, tenemos ya aqu\u00ed un Warp Pre con su admin, su content\u2026 No, con todos. No, no, aqu\u00ed est\u00e1 todo. Es una maravilla. S\u00ed, s\u00ed, s\u00ed. \u00a1Ahora veis mejor! Conoc\u00e9is un poco c\u00f3mo se estructuran los archivos de Warp Pre, bueno, lo explicamos para quienes no lo saben, para que alguna que no lo maneje tanto. Os digo, respecto a esto, \u00bfvale? Oye, no tiene pudor en pregunta, porque es el momento de preguntas. No, no, no. Cuando salgamos, no. Ahora, cuando salgamos, que no respondo ni una pregunta de Warp Pre, ni de\u2026 Ni de plugin, ni de plugin. Nosotros cerramos el sigo en cuando salgamos. Ah\u00ed est\u00e1, \u00bfvale? Pero que\u2026 Oye, aprovechar lo que es el momento, porque hay un \"tormo\" porque tambi\u00e9n le decimos porque tomo todo esto tambi\u00e9n en la posici\u00f3n de estar escuchando y da corte de preguntas, pero aqu\u00ed estamos para darle sarseo, \u00bfvale? S\u00ed, s\u00ed. Este taller, como comentaba antes, lo hicimos en Sevilla. Y hubo much\u00edsima interacci\u00f3n entre otras cosas porque eramos menos gente. Eramos como 15 personas, entonces era como m\u00e1s cercano y tal. Aqu\u00ed, como es tan escenario y tan\u2026 Para mejor, da un poco de corte, pero que\u2026 De verdad que es que esto lo hace y por nosotros, m\u00e1s que nosotros. De hecho, por nosotros venimos para hacer nosotros posiblemente. Claro, seguro que ustedes saben m\u00e1s que nosotros, que no pens\u00e9is que ahora\u2026 Uy, que tan enterrevisa y\u2026 Uy, que sabe un mont\u00f3n. Aqu\u00ed sabemos cada uno de los nuestros. S\u00ed, s\u00ed. Hay una preguntita por all\u00ed. \u00bfCu\u00e1l es la diferencia entre Warp Press Pride Run y Local Situ? Cuando se pone en un Local de Warp Press. S\u00ed, el Local te refiere a ese Local de lo que era antes Flywheel, \u00bfno? Que es un software que se llama Local para tener un instalador local. Local WP. Eso es, eso es. Pues la diferencia, si no me equivoco, porque yo es que no lo he usado en Local. S\u00ed. Local es un Dock. Claro. Local, al final, usa tecnolog\u00eda Docker por detr\u00e1s, \u00bfvale? Y al final, lo que est\u00e1 montando es una instancia completa, te est\u00e1 montando. Un servidor entero del INU, \u00bfvale? Un\u2026 o sea, un\u2026 Mejor se\u2026 Est\u00e1 montando un Ubuntu\u2026 Me lo estoy imaginando, \u00bfvale? Est\u00e1 montando un Ubuntu entero por atr\u00e1s. Est\u00e1 montando todo el\u2026 Un servidor apache entero. Mhsql. Claro, Mhsql. Ah\u00ed est\u00e1 todo. Y ah\u00ed ya empieza a funcionar luego por encima del Warp Press. Aqu\u00ed no. Con WebAssembly, lo que permite es poder ejecutar el c\u00f3digo directamente en navegador, que es una tecnolog\u00eda fant\u00e1stica. O sea, eso es maravilloso. Y el equipo de Playground pues ha conseguido adaptar PHP para Playground, que yo creo que es el equipo que est\u00e1 manteniendo la instancia de PHP en WebAssembly, \u00bfvale? Y ah\u00ed no\u2026 estamos ejecutando ning\u00fan servidor. Las finales son estrategias diferentes para manejar tu instalaci\u00f3n local, que es c\u00f3mo se deber\u00eda desarrollar. S\u00ed. Otra pregunta. Y lo que s\u00ed es verdad es que el Playground puede tener algunas limitaciones por la limitaci\u00f3n que tiene la t\u00e9cnica en este momento. Y lo vaya a ver ahora la limitaci\u00f3n m\u00e1s grande que tiene. Y tanto local como otra vez que tambi\u00e9n funcionan con Docker y tal va a ser m\u00e1s realista con lo que al final es un servidor. Para d\u00eda a d\u00eda al final no utiliza Playground para desarrollar. Lo vais a ver claramente ahora porque una de las limitaciones grandes que tiene es que cada vez que hagamos un cambio tenemos que actualizar el Playground y volver a lanzarlo, \u00bfvale? Pero igualmente es que una vez que tenemos ya todo desarrollado esto para presentarlo al cliente una maravilla. \u00bfPor qu\u00e9? Porque luego vamos a ver que le podemos mandar la URL al cliente para que lo ejecuten directamente en su ordenador. Y \u00e9l pueda estar trasteando, trasteando, lo rompa y cuando lo rompa lo uno tiene que recargar la p\u00e1gina y lo tiene otra vez bien montado. Son estrategias diferentes al final, pero s\u00ed. Simplemente era que compar\u00e1ndolo con local. Yo en local veo los archivos de la base de datos y aqu\u00ed entiendo que est\u00e1n en navegador o aqu\u00ed no. Bueno, aqu\u00ed s\u00ed lo tienes porque lo tienen SQLite. Si conoc\u00e9is SQLite, \u00bfconoc\u00e9is todos SQLite? Bueno, una estrategia de guardar la base de datos en un archivo, \u00bfvale? Eso es muy \u00fatil tambi\u00e9n para todos los como, por ejemplo, la universidad que no te monar\u00e1 ya as\u00ed, pero antiguamente la universidad no te dejaba tener base de datos. Ten\u00edas solo archivos, entonces, pues hay entornas que est\u00e1n m\u00e1s limitadas por temas de seguridad y aqu\u00ed en este caso, por ejemplo, si hizo una extensi\u00f3n de guardar el gusto para SQLite. S\u00ed, y Cado, \u00bfy c\u00f3mo consigo yo descargar la base de datos? Si no me equivoco, si te instala un plugin de backup de Playground te puede descargar una versi\u00f3n de la base de datos, aunque no s\u00e9 si funcionar\u00e1 bien, la verdad, porque no lo he probado. Ten\u00e9s cierta limitaci\u00f3n en el plugin. En el local tienes, sabes que tienes un peque\u00f1o editor de un segundo PHP Miami en el cl\u00edmetro. Efectivamente, eso aqu\u00ed no lo tienes, eso aqu\u00ed no lo tienes, eso es verdad, ser\u00eda una de las limitaciones. Y otra, alguna duda que ten\u00eda, es que, igual dir\u00e9is ahora, que hay que hacer esos archivos que son el bajado, si es un cambio, eso es como se refresca, como los resta\u00faros en el Playground. Como lo que hemos puesto, es que se synchronice con un director de la redredador. S\u00ed, eso iba a decir que aqu\u00ed tienes la base de datos en ht.sqlite y eso lo abre, yo tengo Tablet Plus, o pasa de Paco, \u00bfno tienes Tablet Plus, por favor? S\u00ed, yo tambi\u00e9n lo uso para \u00e9l. Al final, un cliente de base de datos carga ese archivo. Y ese archivo tambi\u00e9n te lo puede llevar cualquier sitio. \u00bfCu\u00e1l es el tablet? No, pero es una aplicaci\u00f3n de\u2026 No, no, no, recupera. Con cualquier cliente de base de datos puede abrirlo. Al final, es muy sencillo porque esto hace un zip y te lo lleva cualquier sitio. No tienes que estar esperando levantar el servidor y todo esto. Pero para un taller, por ejemplo, viene muy bien. No, porque te lo he montado de un momento. Y lo que vamos comentando es que, claro, ya aqu\u00ed ten\u00e9is todos estos archivos que son los archivos de un Warp Desk y alguna vez lo hab\u00e9is visto, lo vais a reconocer, su WP Admin, WP Includes. Recordad que en eso el director no se toca o corta las manos. Y lo est\u00e1 el WP Content, que ah\u00ed es donde hay que tocar. Y ah\u00ed es donde se hacen los cambios, hay los contenidos, los temas, los archivos que se suben y los ponen en los que se ponen los plugins. \u00bfFran, la funcionaria se puede poner en los temas? Es que eso est\u00e1 feo. S\u00ed, seguro. Porque una diferencia entre temas y plugins o al final alguna diferencia conceptual o para intentar que est\u00e9 todo ordenado y cada cosa en su sitio, es que los temas sean. Est\u00e1n dedicados a c\u00f3mo se ve el sitio web, el aspecto. El dise\u00f1o y adem\u00e1s esto va mucho m\u00e1s en ese camino con los temas que est\u00e1n dedicados, los temas de bloques, los temas de Gutenberg, por ejemplo, que es que ya estilo y dise\u00f1o y ya est\u00e1 y no va a poder hacer nada m\u00e1s y que los plugins sean los que tengan la funcionalidad. Que esto realmente tiene cierto sentido porque muchas veces el dise\u00f1o no necesita un mantenimiento o no tiene actualizaciones, claro tiene actualizaci\u00f3n cuando cambia el dise\u00f1o entero, pero una funcionalidad s\u00ed que muchas veces\u2026 Es m\u00e1s f\u00e1cil que la actualizar. Que m\u00e1s f\u00e1cil es que cambie algo y que tengas que tal. Entonces, los plugins para la funcionalidad y los plugins se actualizan por su parte y a\u00f1aden cada plugin una o dos cosas y los temas espec\u00edficos para el tema dise\u00f1o. Esto lo comentamos porque es que muchas veces hay temas que incluyen\u2026 POST-I. Muchas funcionalidades que a lo mejor no usas. El t\u00edpico por ejemplo por folio. El tema con por folio. Cu\u00e1ntas veces no me he encontrado un tema de tinfoires o de cualquier otro de embatos o de cualquier sitio que pones por folio. Que siempre lo ten\u00e9s f\u00e1cil. Claro. \u00bfCu\u00e1l es el problema de esto? \u00bfAlguien sabe cu\u00e1l ser\u00eda el problema de tener un tema con un custo POST-I que\u2026 Mam\u00e1 s\u00ed, desde el perfil. \u00bfC\u00f3mo? Mucho peso. No. No. Ay, ese s\u00ed es. Si cambiamos el dise\u00f1o o el tema activado, el POST-I lo perdemos. Porque normalmente si se ha registrado con el tema tendr\u00e1 su propio slug que a\u00fan es slug que se le pones y cuando cambia otro\u2026 Claro, si quieres respetarte ten\u00e9s que registrar POST-I por un plan y utilizar el mismo l\u00fapano para perderlo. Claro, pero f\u00edjate, esa tonter\u00eda, que es una tonter\u00eda en verdad, porque al final el contenido lo vamos a tener en la base de datos, \u00bfvale? Pero ya no va a ser asesible para nosotros. Entonces, cu\u00e1ntos clientes nos llaman asustados porque han cambiado el tema y he perdido toda la informaci\u00f3n. Yo estaba poniendo todas las cosas en el portfolio, dios mis clientes, mis cosas y lo perd\u00ed todo porque he cambiado el dise\u00f1o nuevo. Esa llamada la hemos recibido seguro. Hay una resilla por aqu\u00ed al principio. Claro, claro. Y entonces, ahora lo que ten\u00edamos que hacer, tenemos que hacer un plugin que tenga el mismo etiquetado y el mismo l\u00fad del POST-I y del tema y todo para recuperar eso. Directamente vamos a hacer todas las funcionalidades que no sea visual, porque el tema tambi\u00e9n\u2026 Hay temas que tambi\u00e9n necesitan un poquito que no estamos diciendo que todas las funcionalidades ya tengan que ir en los plugins. Todas las funcionalidades principales que esa a\u00f1ada, WordPress, necesarias de front visuales, eso nos lleva el tema. Con ejemplo, los patrones, eso s\u00ed se est\u00e1 incluyendo directamente en los CIN. Pero tambi\u00e9n depende\u2026 Tambi\u00e9n en los plugins. S\u00ed, y tambi\u00e9n\u2026 Puedes encontrar plugins con patrones. Claro, claro, pero eso s\u00ed es algo\u2026 Es una funci\u00f3n que es un poco sutil, pero s\u00ed en este caso, dise\u00f1o, patroneta, pero s\u00ed las funcionalidades en buena pr\u00e1ctica y de hecho se pide que se vaya a plugins. As\u00ed que todo, por favor, vamos a hacerlo en plugins. \u00bfMe ha venido a ver? \u00bfMe ha venido a ver? Ahora me he venido a hacer plugins, \u00bfno? S\u00ed, de hecho, una cosa que tambi\u00e9n hace mucha gente es el concepto de hacerte tus plugins de funciones. Que es cuando est\u00e1s haciendo un tema, est\u00e1s desarrollando un sitio para alguien y quieres a\u00f1adir algo que es m\u00e1s funcionalidad, no es tanto tema. Por ejemplo, lo que hemos comentado, a\u00f1adir un custom post type, es que te hagas tu propio plugin, aunque no lo publique, no tienes por qu\u00e9 publicarlo, pero en ese plugin introduces esas funcionalidades para que luego, en el futuro, pues pueda seguir funcionando. Un recurso muy, muy, muy s\u00faper \u00fatil, \u00bfvale? Para ver las \u00faltimas tendencias de desarrollo en WordPress y c\u00f3mo se desarrollan los temas, es ver directamente por los temas que est\u00e1n ahora desarrollados por la comunidad, como el 2024, no? El FI, en este caso. Y ah\u00ed vamos a ver c\u00f3mo se desarrollan ahora los temas este a\u00f1o, por eso es la \u00faltima tendencia, c\u00f3mo se est\u00e1 haciendo. Todo esto lo podemos ver directamente aqu\u00ed porque esto est\u00e1 desarrollado por un equipo de comunidad, que son t\u00fa, nos veas o m\u00e1quinas, y as\u00ed vamos a poder desarrollar los temas ahora, \u00bfvale? Y lo mismo pasa con los plugins, es una tonter\u00eda, \u00bfvale? Pero el HelloDolly es un ejemplo b\u00e1sico de c\u00f3mo se crea un plugin, \u00bfvale? Nos vamos a recomendar, nunca s\u00e9, por ejemplo, un plugin directamente con un archivo PHP directamente aqu\u00ed, vamos a hacer una carpeta, \u00bfvale? \u00bfPor qu\u00e9? Porque vamos a tener que tener m\u00e1s archivos, entonces imaginarse si empezamos a tirar archivos aqu\u00ed, puede ser una locura. La carpeta se suele nombrar de alguna forma, y nos encontramos carpetas con espacios, con may\u00fasculas, tiene que ser siempre min\u00fasculas, con guiones, y respetar\u2026 esa carpeta, o ese nombre se le llama, el plan es LOO, ese nombre de carpeta hay que respetarlo para todo, digo como buena pr\u00e1ctica, no pasa nada que le llame de una forma y despu\u00e9s la utiliza de otra, pero como buena pr\u00e1ctica, utilizar ese LOO, y no cambiarlo en la vida. O sea, esa decisi\u00f3n, bueno, una de las m\u00e1s importantes a la hora de crear un plugin es \u00bfQu\u00e9 nombre le pongo? Si lo vas a distribuir y tal, porque lo que sucede es que cuando\u2026 las carpetas que hay aqu\u00ed dentro de plugins, por ejemplo, crees que hago un apaco, \u00bfpongo un plugin de SEO o algo as\u00ed? - SEO plugin. - SEO Madrid, para que no haya\u2026 - S\u00ed, efectivamente. Esta carpeta, si que no es una carpeta, la misma, pero bueno\u2026 - Ah, me quedaba. Si el director de WordPress hubiera un plugin con ese nombre WordPress.org\/plugins\/barraseo.md, WordPress detecta que ese plugin existe en el director y va a intentar actualizarlo desde ah\u00ed. Entonces, cuando crees que es tu propio plugin, es un nombre que sea propio, que sea vuestro, no le pong\u00e1is mi plugin. - Que eso tambi\u00e9n se va a ver. - S\u00ed. Y ahora importante, porque seguro que\u2026 a ver, habr\u00e1 tambi\u00e9n mucho desarrollador PHP como llamamos al archivo principal. \u00bfSab\u00e9is qu\u00e9 me lo dice? \u00bfC\u00f3mo llamar\u00e1 y llamo al archivo principal? - \u00bfIn\u2026 eh? - \u00bfIn the\u2026 Ah\u00ed est\u00e1 el buen\u2026 ind.php, \u00bfvale? Esto se puede hacer en WordPress, porque WordPress no busca por el index. WordPress, cuando creemos un plugin, va a buscar por d\u00f3nde est\u00e1 la cabecera, \u00bfvale? Que es que podemos hacer el archivo principal dentro de una carpeta de otra carpeta, que WordPress va a empezar a buscar donde est\u00e1 el archivo con la cabecera. Esto tiene un problema, \u00bfvale? \u00bfY cu\u00e1l es el problema? Que esto tiene un mont\u00f3n de incompatibilidad, \u00bfdesde luego? \u00bfVale? Que esto va a funcionarte toda la vida y esto no va a dar ni un problema, pero luego, como lo suba al repositorio y dem\u00e1s, y luego, para tener traducciones y dem\u00e1s, va a tener un mont\u00f3n de problemas, pero que vaya a flipar desde el problema que os va a dar a la hora de traducir, \u00bfvale? Y ciertas cositas, \u00bfvale? Entonces, como buena pr\u00e1ctica se utiliza el nombre del luz y el nombre del archivo, el mismo luz. Entonces, como han dicho por ah\u00ed, tendr\u00eda que ser tambi\u00e9n Jos\u00e9 Madrid. Punto, l'HT. \u00bfY con esto ya estamos empezando a crear un plugin? As\u00ed sin convenir. O cre\u00e9is que esto es una tonter\u00eda, pero que hay plugins que no voy a decir el nombre, os lo busc\u00e1is porque est\u00e1 todo en el repositorio, lo pod\u00e9is descargar de un patroda aqu\u00ed, \u00bfvale? Con cientos de miles de instalaciones que tienen este problema. \u00bfPor qu\u00e9? Porque en su d\u00eda, cuando lo subieron, son desarrolladores PHP y que le pongo a mi asigo principal, o \"indexhp\", \u00bfvale? Y ahora, pues, han tenido muchos problemas con esto. \u00bfCu\u00e1l es la \u00fanica soluci\u00f3n que tiene esto? \u00bfVale? Este es el problema. Cambiar el nombre del archivo. Pero \u00bfqu\u00e9 pasa si le cambiamos el nombre del archivo al archivo principal? \u00bfQu\u00e9 pasa? Uno por uno, por favor. Por ah\u00ed. \u00bfQu\u00e9 pasar\u00eda? Mira aqu\u00ed. Bueno, eso puede ser un error. S\u00ed. Esta es ella. \u00bfQu\u00e9 pasa? Hay todas las instalaciones que tenga ese plugin, se van a desactivar. Imaginarse un plugin funcionando. Imaginarse, por ejemplo, que no es, \u00bfvale? Pero imaginarse elementos. O un Google Comer. Con 18 millones de instalaciones que la tengan que desactivar las 18 millones. Son unas que han elegido el nombre del archivo. O sea, el nombre del archivo y la carpeta ya son inmotables. Por eso siempre se dice que se piensen un poco a largo plazo. Si hacemos un plugin, no s\u00e9, que busque arreglar un problema ahora, busca un nombre m\u00e1s gen\u00e9tico. M\u00e1s general por si en un futuro consigue actualizaciones, \u00bfqu\u00e9 es lo que ha pasado? No le ponga ah\u00ed Twitter, por ejemplo. Por un plugin. Porque luego cambia el nombre y luego ya. O por ejemplo, hay uno muy conocido que es un plugin de SEO, se llama SEO Framework. No s\u00e9 si lo conoc\u00e9is. Pero es autodescripci\u00f3n. S\u00ed, s\u00ed. Pero ya no puede cambiarlo. Ya est\u00e1. En su momento ten\u00eda que haberlo llamado plugin SEO. Bueno, SEO Framework, por ejemplo. Y ahora ya no. Ahora ya es Lula Beck y tiene ese. Cuando has dicho que el nombre del plugin tiene ser \u00fanico, \u00bfd\u00f3nde puedes buscar? Si ese nombre existe. A ver, lo puedes buscar directamente en el repositorio. Si existe algo parecido. No se ve de preferencia. Pero igualmente hay herramientas, \u00bfvale? Que puedes buscar por este tipo de cosas, \u00bfvale? Yo veo f\u00e1cil el buscar el nombre que vayas a poner en el repositorio y mirar si lo encuentras. Si el buscador por lo que sea, funciona un poco regular, mejor que busques en Google o un buscador\u2026 Se lo puede preguntar, \u00bfsabes qu\u00e9 pretendo? Si no lo hagas, s\u00ed o sea. Claro lo que\u2026 Otra cosa tambi\u00e9n, si es un plugin personal para un cliente, pues si tienes el nombre de tu empresa o Freelang, pues pones tu nombre adelante y despu\u00e9s lo que hace el cliente. Entonces ya sabes que eso no va a ser dif\u00edcil, \u00bfno? Que encuentre otro plugin con el mismo. Tra\u00eda otra. El micro, el micro. Bueno, para revisar eso si existe el plugin cuando baja el directorio de los plugins y est\u00e1s en la URL de cualquier plugin la \u00faltima parte es \"look\" ah\u00ed puedes ver\u2026 ah\u00ed sabes si est\u00e1 repetido o no. Y otra cosa que no s\u00e9 si lo mencionaron cuando cambias el \"look\" de un plugin es verdad que se desistalan y aparte de eso los plugins que interaccionen con ese otro plugin y que revisen si est\u00e1 activado tambi\u00e9n tienen que cambiar todo el c\u00f3digo porque utilizan el nombre de la carpeta y el nombre de la oficial que activa. Y una puntualizaci\u00f3n a eso que pr\u00e1cticamente es todo lo que t\u00fa has dicho, \u00bfvale? No, el 100% de las veces o sea, el 99 si va a ser no el 100% de las veces el \"look\" del repositor tiene por qu\u00e9 ser el nombre de la carpeta y dem\u00e1s porque los autores pueden solicitar un \"look\" distinto tambi\u00e9n. Ah, gracias, no sab\u00edas. \u00bfVale? Los que est\u00e1n en colas de revisi\u00f3n tienen ya uno reservado. Puede que est\u00e9 en colas de revisi\u00f3n que la colas de revisi\u00f3n hay 2.000 plugins en todo el clado pero de todo modo ser\u00eda improbable si tiene un nombre distinto en vivo. Igualmente, y lo \u00faltimo ya sobre el tema de las URL si sub\u00eds un plugin una vez que ten\u00e9is vuestra URL a toda la vida. Si, vienen preguntas diciendo \u00bfPuedo cambiar mi slug? Por ejemplo, este deseo frango, voy a pedirlo. No se puede. \u00bfPor eso? \u00bfPor qu\u00e9 se debe de se instalar plugins? \u00bfPero es un feo final? Claro, como crean m\u00e1s problemas los usuarios o evidentemente eso no se permite. Entonces ya tenemos dentro de la carpeta \"plugging\" tenemos una carpeta que se va a ver el chico con ese nombre y ahora que hacemos. Hay 2 preguntas. No s\u00e9 si saben los \"most just plugins\" vuelves tambi\u00e9n tiene una carpeta S\u00ed, m\u00e1s para plugins. Si bajas la funcionalidad que a lo mejor sea p\u00fablica en vez que sea un plugin puede ser un \"most just plugin\" o no sea publica. \u00bfEso es otra carpeta? Es una carpeta especial para los sitios multi sitios y efectivamente lo que hace es que esos plugins que t\u00fa pongas, puedes poner un \"function\" o puedes poner \"plugging\" directamente que se activan siempre o sea no puedes desactivar o sea en una pesta\u00f1a parte de plugins siempre activado. S\u00ed, yo ten\u00eda un peque\u00f1o apunte que a lo mejor lo vais a comentar y es que a pesar de que no se ponga el index PHP por los problemas que hab\u00e9is comentado que es muy interesante que lo hab\u00e9is comentado a\u00fan as\u00ed es interesante crearlo y en todas las carpetas por algo que seguro que vais a explicar ahora mismo. S\u00ed, bueno una de las cosas que hacemos durante las revisiones es pedir que los archivos PHP ponerles el \"appspot\" este al principio b\u00e1sicamente se les pone que verifiquen si existe un par\u00e1metro de WordPress para que no se puedan ejecutar directamente los archivos PHP Pero me refiero a que para que no haya un listado de directorios si en Apache est\u00e1 mal configurado eso ocurre en much\u00edsimas instalaciones es mejor en cada carpeta tener un index PHP con el t\u00edpico \"silence is holding\" por ejemplo Claro, los hosting normalmente por defecto evitan que esas carpetas ya es que lo que pasa que hay acepciones pero normalmente evitan que esas carpetas se puedan listar y por tanto vean los archivos pero no siempre o el \"dorks\" ve su mont\u00f3n pero s\u00ed, efectivamente un archivo como t\u00fa has comentado un index.php vac\u00edo sin nada y ya est\u00e1, as\u00ed se evita el listado de archivos Igualmente, lo del index que estamos comentando es para el archivo principal del plugin el que va a llevar el comentario evitarlo 100% de la presa que sea un archivo gen\u00e9rico como el index \u00bfC\u00f3mo hacemos un plugin? que es lo primero que tiene que llevar un plugin alguien lo sabe que es lo que tendr\u00edamos que hacer si quieres un plugin una cabecera una cabecera que es un conjunto de comentarios con distintas directrices El plugin tiene que identificarse a s\u00ed mismo como plugin \u00bfDe d\u00f3nde lo vamos a copiar? por ir a ver el \"Hero Dolly\" mismo lo podemos copiar que antes de ya empezar con los errores comunes alguien detecta aqu\u00ed un error solo aqu\u00ed ya hay un peque\u00f1o error y lo vamos a comentar (murmullos) (murmullos) ya lo han dicho ya lo han dicho no se comprueba la ejecuci\u00f3n directa del PHP eso es para que no haya ataques directos a archivos PHP muchas veces hay por ejemplo hay PHP que reciben la petici\u00f3n de un Aya o de otra petici\u00f3n entonces si no le ponemos a parte de un NOM puede ejecutar el PHP y hacerle petici\u00f3n directamente esta despu\u00e9s ser\u00eda una forma de hackear la otra la forma de que los archivos PHP de un plugin solo los ejecute mortes y no los ejecute hay un caso un concreto con PHP donde podemos hasta no ponerlo hay un caso concreto en PHP donde podemos porque ya ser\u00eda imposible esa ejecuci\u00f3n de fuera alguien sabr\u00eda cu\u00e1l es el caso concreto que estoy comentando donde no hace falta poner un APA es s\u00faper f\u00e1cil o no (murmullos) justo justo cuando hay solo una declaraci\u00f3n de clase sabes que no va a haber nada ejecutable es una declaraci\u00f3n claro el APA sobre todo es para cuando tenemos el c\u00f3digo aqu\u00ed y una funci\u00f3n aqu\u00ed por ejemplo se puede ejecutar lo que pasa es que est\u00e1 realmente posiblemente no se ejecute porque seguramente abajo del todo hablar\u00e1 de alguna funci\u00f3n de golpe el atasi\u00f3n y en cuanto se ejecute estrenamente llegar\u00e1 aqu\u00ed y esta funci\u00f3n no existe y fallar\u00e1 le ha dado un fatal error que PHP pero se pide que se ponga en todos los archivos por si acaso como una buena pol\u00edtica y si no lo hagas en la historia nosotros lo comprobamos y te pedimos que lo ponga ya preventivamente o incluso en los PHP de clases porque dice bueno llevo una clase pero a lo mejor se te ocurre cambiar ese archivo y meter funciones meter un tipo de de funciones o lo que sea y entonces pues lo pedimos tambi\u00e9n como manera preventiva y es preventivo porque adem\u00e1s una de las cosas que hay que tener en cuenta es que vale puede que tu plugin ahora mismo por lo que sea como este hecho y no te ha afectado por eso no te puedo demostrar que se puede hacer algo malo pero en el futuro cuando edites el plugin cuando hagas cambios a lo mejor si que te dejas algo entonces todas las buenas pr\u00e1cticas que puedas aplicar para evitar todo ese tipo de cosas pues est\u00e1 bien por ejemplo tambi\u00e9n pedimos escapar todas las salidas cuando a veces no hace falta porque hay una salida que viene de una variable que es una variable fija por ah\u00ed no van a meter nada por ejemplo que es tuya pero en as\u00ed se solicita porque ma\u00f1ana cambias esa constante por una variable que viene de otro sitio y tal y no te acuerdas de ponerle el escape se escapa todo lo que sale se sanitiza todo lo que entra por ah\u00ed pregunta por ah\u00ed por ah\u00ed ah\u00ed va la pregunta por ah\u00ed pregunta cuando van a revisar el plugin estamos en un template y llamamos la funci\u00f3n home your para pintar el sitio eso tambi\u00e9n es estrictamente necesaria escaparlo aunque sea una funci\u00f3n de botles porque tiene filtras imagina yo cuando reviso cuando reviso y lo veo digo bueno me estoy pidiendo que escape esto pero en fin pero si se solicita aunque sea as\u00ed hay casos que no son pero para no perder es como lo de las paths igual es que al final no te equivocas est\u00e1n escaparas todas las salidas no tienes que andar mirando excepciones claro tambi\u00e9n piensas que t\u00fa te f\u00edas de lo que t\u00fa tienes en tu base de datos t\u00fa piensas lo siempre as\u00ed por qu\u00e9 te tienes que f\u00edas de lo que t\u00fa tienes en tu base de datos pero bueno dice una funci\u00f3n pero claro para final para todas las salidas t\u00fa piensas lo as\u00ed para que te fiar\u00edas de lo que t\u00fa tienes en tu base de datos porque te podr\u00edas cambiar el valor con la base de datos y lo estas ejecutando otro plugin te mete un filtro en la funci\u00f3n que genera la url y es que tambi\u00e9n eso pasa entonces Paco esta haciendo esta cosita que hace que el plugin se pueda identificar claro claro lo \u00fanico que hay yo es venirme a otro plugin y copiar la cabecera para yo escribir a m\u00ed igualmente si pon\u00e9is cualquier cosa en WordPress y le pon\u00e9is handbook detr\u00e1s o va a poner o va a salir aqu\u00ed la documentaci\u00f3n oficial de todas las cabeceras que hay como son las cabeceras de WordPress y aqu\u00ed hay ejemplos de cabecera que podr\u00edamos pegar copiar de gelo dolly y vamos a poner por SEO Madrid que va a ser el plugin as\u00ed el plugin WordPress lo ponen normalmente si tienes una web en la que hablan de tu plugin cuando mas te pon\u00edas eso eso te sugiere Paco no es que te quede clash o no eso te esta sufriendo tu propio c\u00f3digo hasta que la gente artificial polo polo hostia ahora vamos a ponerlo mas mule en vez bueno como ya esta la en la media en que l\u00edo te esta metiendo la eclipsencia hostia incre\u00edble hay en la documentaci\u00f3n aparte de su cara dec\u00eda de la IA en la documentaci\u00f3n ten\u00e9is cabecera y hay una que hace poco que ha dicho que esta muy bien que requires plugin que te ahorra mucho c\u00f3digo PHP en que tu le pones el slug del director de WordPress y entonces se\u00f1alo si queres \u00bfrequires plugin? requires \u00bfque hace que ahora si? el singular y el plural yo siempre tengo dudas y lo bueno es que si detecta que no esta un comment te sale una interfaz para que tu puedas activar entonces es muy \u00fatil y no te deja activarlo hasta que no crea la dependencia hasta ahorra much\u00edsimo c\u00f3digo PHP ver si se ha activado o si no se ha activado o sea fijar en una linea lo rapido que tenemos la dependencia de hecho vamos a dejarlo puesto y as\u00ed lo veis venga y listo ya esta esto ya es un plugin vamos a ver como se ve ya lo hemos probado ya lo hemos probado vamos a ver la descripci\u00f3n que hemos creado tan bonitas vale ahora me ir\u00eda este es el que yo tengo en el local requires plugins o sea los dos en plural hostia no hay nada esto es lo que habl\u00e1bamos que siempre esta el porque no vamos a utilizarlos en nuestro momento de desarrollo total para usarlo diariamente siempre vamos a tener que estar sincronizando sincronizando lo que ahora va a pulsar a ver que sincronizar el shibos locales y ya lo tendr\u00edamos es rapido pero hostia esta pulsando todo el rato cada vez que hagamos un cambio es como un muchedioso como veis pues ha salido la interfaz requires plugins eso es la quides con ese con ese pero con ese esta con de si no lo coge bien, no esta bien puesto si si lo coge con ese requires plugins y a m\u00e1s a ver si a que no lo dejas activarlo vale un toro claro aqu\u00ed te dice normalmente te sale un enlace no se si como joaquinplegrablo esta cambiando para que te pueda instalar el plugin depende si porque a lo mejor no tiene acceso a descargarlo porque no se ahora mismo la confirmaci\u00f3n igual no tiene la red puede ser claro si no marca lo paco no mira eso es eso si si si ahora si te dejas esto es as\u00ed la eso esto es lo \u00fanico a que hagamos que hagamos coger cambio hay que estar ator rato recargando pero bueno no pero igualmente te sale te sale aqu\u00ed ya enlace ah\u00ed ya lo podemos instalar instalado, esta muy comod pero recordar que tienes el slope como en el caso este que decimos de el feseo framework tendr\u00e9is que visitar la web y la parte de arriba del laurre le ten\u00e9is que cogerse y entonces ya tenemos un plugin vamos a ver si lo podemos activar o instalabos como eso quitarles requires mas f\u00e1cil claro y as\u00ed ve veas un cambio lo guardo me vengo y sincronizo y todo rato cada vez que hagamos un cambio tiene que ser este proceso y ya podremos activarlo y lo damos y ya tenemos un plugin activado que que hace? nada en absoluto es una mierda es una mierda claro lo dice hasta la ida pero esto ya es un plugin y ya es un entorno ya podes estar ejecutando con este y ahora la cuesti\u00f3n es claro que hacemos que haga el plugin se llama \"didicxlydic\" pero bueno tu ya esta un poco si inventa cosas dice que haga la canci\u00f3n completa y la canto (risas) cado ahora es el momento de poner aqu\u00ed \"cococopash\" y lo que hay que tener en cuenta es como nos comunicamos con WordPress que normalmente el lugar de poner aqu\u00ed como si esto pueda cualquier cosa un PHP echo bar dump directamente de lo que nosotros queremos mostrar porque queremos que o que se mueste en alg\u00fan sitio o que modifique alg\u00fan comportamiento de WordPress o que incluya algo en otro plugin de WordPress como puede ser bucomes esta todo el sistema de hooks que eso ya se ve en el \"Helludoli\" que tiene una atacci\u00f3n que los hooks son, hay de dos tipos est\u00e1n los \"action\" y est\u00e1n los \"filter\" que diferencia entre ambos si alguien lo quiere comentar antes de una buena pr\u00e1ctica porque no estamos modificando c\u00f3digo estamos a\u00f1adiendo o quitando esta es una buena pr\u00e1ctica porque una cosa que pasa sobre el pre es que si actualizamos plugin si notizamos esta tegea de c\u00f3digo se rompan cosas entonces es mucho m\u00e1s f\u00e1cil que no se rompan que diferencia hay en los hooks entre actions o filters \u00bfalguien alg\u00fan valiente? o no valiente de como dig por all\u00ed para ah\u00ed se animan si si si, me imagino que estar\u00e1s haciendo estar\u00e1s haciendo un env\u00edo de informaci\u00f3n y cuando est\u00e1s haciendo un filtro estar\u00e1s pidiendo informaci\u00f3n bueno hay algo si eres un \"action\" es, yo quiero es decir, en una \"action\" puedes hacer un filtro o as\u00ed si puedes hacer una acci\u00f3n de petici\u00f3n de informaci\u00f3n o de filtrado un filtrado ser\u00eda simplemente de esta informaci\u00f3n si, por ah\u00ed va a ser filtrado eso seguro por ah\u00ed una mano vamos por ah\u00ed un \"action\" lo que hace es crear una funci\u00f3n nueva tuya y un \"filter\" lo que hace es modificar una que ya hay o una variable si, b\u00e1sicamente si, realmente la verdad es que se puede explicar de distintas formas porque al final tambi\u00e9n es como lo tomes y el concepto y tal yo la forma en la que un poco lo distingo y lo explico es que dentro del c\u00f3digo de WordPress hay un mont\u00f3n de sitios donde hay cosas en las que puedes hacer cosas que son esto que llamamos \"hooks\" el \"action\" es que t\u00fa, en ese momento de ejecuci\u00f3n le est\u00e1s diciendo que c\u00f3digo tiene que ejecutar le est\u00e1s diciendo un c\u00f3digo tuyo, de tu plugin o bueno, puede ser tu plugin tambi\u00e9n no tiene que ser tuyo pero b\u00e1sicamente le est\u00e1s diciendo que en ese momento cuando llega WordPress a ese punto de la ejecuci\u00f3n que ejecute esto que normalmente hay una funci\u00f3n que t\u00fa la edad puede ser un m\u00e9todo de una clase puede ser una funci\u00f3n directamente y tal cuando es un \"filter\" y por ah\u00ed es verdad que hab\u00eda estaba acertado con lo que has comentado un \"filter\" es pr\u00e1cticamente similar pero la diferencia es que si que terminas ejecutando c\u00f3digo en ese momento pero el objetivo de esa edici\u00f3n es modificar algo WordPress en ese momento de la ejecuci\u00f3n a ti te manda un par\u00e1metro con el que est\u00e1 te trabajando te manda los datos, esa informaci\u00f3n que hay ah\u00ed t\u00fa en tu funci\u00f3n lo procesas, haces lo que quieras y se lo devuelves a WordPress y WordPress sigue su ejecuci\u00f3n con la informaci\u00f3n que le has dado de vuelta \u00bfA qu\u00e9 te refiere? Me refiero igual a un \"action\" ser\u00eda una \"action\" que te digui\u00f3 que me refiero a lo mejor un \"action\" ser\u00eda como por ejemplo una base atos cuando haces una petici\u00f3n haces un \"select\" dame esta informaci\u00f3n y luego puedes filtrar esa petici\u00f3n decirme \"segucioname\" esta informaci\u00f3n pero por ejemplo solo los hombres donde el g\u00e9nero igual hombres donde el sexo igual hombre No realmente pero s\u00ed que puedes modificar la base de datos con los filtres y te va a ver si va por ah\u00ed estamos ense\u00f1ando en pantalla hay un \"plane\" que se llama \"hooks filter\" y los \"hooks\" como dice Frank son huecos donde t\u00fa puedes ejecutar c\u00f3digo y en el \"action\" se compone por varios par\u00e1metros uno es el hueco que es el \"hook\" que aqu\u00ed lo estamos viendo el primero es muy bien \"admignnotice\" pues hay un hueco que da \"workpress\" b\u00facalo en el code yo dec\u00eda por asimilarlo a algo por coger una mensaje a \"fora\" y se me ha parecido por ejemplo perd\u00f3n as\u00ed de este grupo pero en una base de datos es eso cuando quieres la informaci\u00f3n o la pides o la pides filtrada no pides informaci\u00f3n sino que es m\u00e1s bien que t\u00fa en ese punto ejecutar algo piensa que \"workpress\" est\u00e1 lleno de huecos huecos que te va dando de hecho los \"plane\" que est\u00e1n bien hechos dejan tambi\u00e9n esos huecos \"wookcomers\" los m\u00e1s populares los sabr\u00e9is y entonces no s\u00f3lo te permite aqu\u00ed ves todos los huecos y veis en orden que se ejecutan los huecos y los huecos pueden tener funciones y ya ejecut\u00e1ndose que t\u00fa puedas quitar, eliminar y se ser\u00eda \"remove action\" dentro de los huecos hay funciones y esas funciones t\u00fa puedes elegir quitarla o a\u00f1adirla y tambi\u00e9n puedes decir \"no, no, quiero a\u00f1adirla\" pero antes que es el tercer par\u00e1metro que ser\u00eda la prioridad entonces t\u00fa seg\u00fan est\u00e1s en muy buena pr\u00e1ctica a la hora de programar porque t\u00fa vas haciendo por ejemplo una cosa que se hace mucho en \"wookcomers\" que es el archivo de plantilla de checao o de pagina de producto te lo copia en tu tema y lo modifica pues cuando se actualice el \"warp\" en la mojosa plantilla se ha quedado osoleta entonces una buena pr\u00e1ctica es \"no, no, mejor, voy a poner en mi \"pluggy\" \"adactium\" o \"remove action\" y las funciones que yo vea que sean necesarias porque los huecos s\u00ed ver\u00e1n que son bastante inmutables se mantienen durante mucho tiempo porque por retrocompatibilidad van a estar en \"wookcomers\" toda la vida y aqu\u00ed pod\u00e9is ver todos los huecos que se ejecutan y bueno pues hay estos son los \"fit\" \"admin\" no son huecos aqu\u00ed por ejemplo el \"admin\" no te lo tenemos aqu\u00ed y ese se ejecuta en el \"body\" digamos del \"admin\" entre medias de antes del t\u00edtulo de una de una p\u00e1gina y claro eso est\u00e1 por todos lados cuando se ejecuta \"warps\" con esto pod\u00e9is decir en el momento que \"warps\" carga la url haz esto un poquito o cambiame si es un \"fit\" cambia la url por esto o por ejemplo un caso como muy claro que creo que podemos mostrarlo es cambiar el t\u00edtulo de la p\u00e1gina o algo as\u00ed cambiar algo de la p\u00e1gina pero yo creo que se puede ver muy claro con eso en este caso el t\u00edtulo bueno es que no se si va a cambiar porque aqu\u00ed pone \"warps playground\" como t\u00edtulo de la p\u00e1gina no se si al estar dentro de \"playground\" bueno aqu\u00ed una cosilla claro las acciones se est\u00e1n ejecutando en PHPHP el tema est\u00e1 hecho en HTML, CSS un tema de bloque entonces como veis no tiene tanto huecos de hooks no se ejecutan en PHPHP si cogera un tema cl\u00e1sico es un tema cl\u00e1sico que si est\u00e1 hecho es muy importante tenerlo en base para que no lo sepa a ra\u00edz de el fullside editing que se a\u00f1ade a WordPress se crea un nuevo concepto de tema que son los temas de bloque donde ya no tenemos PHP ya solo tenemos HTML y unos xml que nos permite meter todas estas configuraciones para que todo el sitio funcione exclusivamente con bloque dando una posibilidad infinita eso da para un taller 2 o 3 porque WordPress cambia fullside editing un tele uno para generate espere vamos a ver cualquiera que no a un 20 antiguos perd\u00f3n ya lo tocado demasiado no tocas el ordenador no se toca el ordenador hay una manera de un tema uno que no sea de 20 antiguos por ejemplo tienes que ser seguro entonces los hooks que est\u00e1bamos hablando los tenemos en el admin lo tenemos cuando se ejecuta incluso nosotros en nuestro propio para bien podamos poner esos huecos pero bueno eso ya ser\u00eda otra historia pero vamos que esos huecos son muy importantes y el plugin este o se\u00f1al o se\u00f1al como est\u00e1n esos huecos una buena pr\u00e1ctica es llenar la cantidad de huecos entre los que crea el WordPress crea el tema y crea los plugins que tengas tu instalado esto para desarrollar est\u00e1 s\u00faper bien y tambi\u00e9n fijarse la diferencia que tenemos entre un plugin un tema un tema cl\u00e1sico un tema fulsa editing ya solo por la cantidad de huecos que tenemos en uno y en otro es que realmente un plugin por ejemplo el t\u00edpico plugin que a\u00f1ade las redes sociales al final desde el post es que realmente usa un action y que est\u00e1 por ah\u00ed aqu\u00ed por ejemplo veis lo que dec\u00edamos que se llama generate before content que tiene una o sea aqu\u00ed te lo est\u00e1 mostrando en la \u00e1rea gr\u00e1fica veis la acci\u00f3n que es el hueco y nosotros podremos elegir que incluso esa funci\u00f3n la podriamos desactivar un remoactio el hueco y la funci\u00f3n podriamos eliminarlo y que tenemos el t\u00edtulo de las p\u00e1ginas y si le metemos un condicional de que no sea en home o que sea en home por ejemplo podriamos eliminar el t\u00edtulo de las p\u00e1ginas de inicio pero eso con una l\u00ednea de ADACTI o remoactio si que te voy a hacer un ejemplo con get the title que se puede filtrar para ponerle hello world 2025 actualizado que son muy t\u00edpicos del SEO o sea que queremos vamos a filtrar de title un filto de title y as\u00ed se ve claramente para que ve\u00e1is a la hora de la documentaci\u00f3n de warpre que es muy importante revisar porque vamos a poder ver c\u00f3mo se ejecuta por dentro estas funciones porque vamos a decir por ejemplo por qu\u00e9 tengo que escapar a esta funci\u00f3n de warpre del core porque tengo que estar sanitizando esto porque a lo mejor por alg\u00fan proceso interno no lo hace entonces como s\u00e9 que s\u00ed tengo que hacer lono yendo directamente a la documentaci\u00f3n a verlo porque ah\u00ed vamos a poder ver la ejecuci\u00f3n interna del play de ADACTI o de la funci\u00f3n en concreto cual quer\u00edamos tocar de title por ejemplo de title esto es el base de nuestro mejor amigo todo el d\u00eda es que vamos a poder ver directamente c\u00f3mo funciona por dentro y las funciones que utilizan es muy necesario para saber ese proceso de ejecuci\u00f3n y sobre todo si necesitamos o no escapar este contenido o sanitizarlo en caso de que fuera rebe fuera una entrada y al final est\u00e1 el filto al final de ese bloque porque esto forma parte del n\u00facleo de warpes m\u00e1s abajo ah\u00ed y fijaos que warpes dice porque esto es una funci\u00f3n que te da el t\u00edtulo de un art\u00edculo que es ese \"hello war\" que hemos visto ah\u00ed y warpes te dice al final te devuelvo el t\u00edtulo pero antes de devolv\u00e9rtelo voy a aplicarlo en filtro de title y le mando el t\u00edtulo en el segundo ped\u00e1metro en este caso y en el tercero el identificador del art\u00edculo y esto es para que cualquier plugin cualquier cosa pueda tomar eso y decir vale pues te lo voy a cambiar y voy a hacer otra cosa distinta con esto lo bueno que trae tambi\u00e9n la documentaci\u00f3n que abajo siempre no tiene un mont\u00f3n de ejemplos vale eso por la comunidad como puede utilizarlo vale aqu\u00ed hay comentarios hace 9 a\u00f1os tambi\u00e9n hay funciones que son perennes y que no van cambiando vale entonces aqu\u00ed hay muchos ejemplos que va haciendo la pe\u00f1a y que no son s\u00faper \u00fatiles para poder programar todo tipo de modificaciones esto es el recurso que vamos a estar utilizando en nuestro d\u00eda a d\u00eda vale esto va a ser fiarse que hay documentaci\u00f3n por todos lados vale hay que hacer los ejemplos de eso y lo vemos en vivo bueno al filtro si quiere y a la copia de aqu\u00ed directamente una buena pr\u00e1ctica que ahora tambi\u00e9n vamos a conocer y que nosotros de hecho cuando revisamos plugins lo decimos es no s\u00e9 si os ve\u00e1is de la cuenta cuando hacemos colamos css o js que hay que ponerle la versi\u00f3n de tu plugin continuamente vale y en otras cosas tambi\u00e9n a lo mejor hace falta utilizar la versi\u00f3n del plugin pues aparte de ponerlo en como cabecera de PHP lo bueno es que en tu inicio de plugin tenga un conjunto de constantes prefijadas con un prefijo de lo que va a necesitar al lado del plugin la versi\u00f3n se utiliza tambi\u00e9n por ejemplo el directorio principal de tu plugin y as\u00ed bueno con los clases si no pero tiene ya hecho pero tambi\u00e9n vamos antes si lo engancha eso lo que comentaba aqu\u00ed un poco aqu\u00ed por ejemplo lo que dec\u00edamos tenemos aqu\u00ed una cabecera este es un plugin que est\u00e1 publicado en el directorio y aqu\u00ed tenemos el aspad y definimos una serie de constantes que luego lo vamos a utilizar para muchas cosas las m\u00e1s t\u00edpicas son la versi\u00f3n yo esto lo recomiendo bastante de forma importante porque ya digo cuando me voy a hacer un encolamiento de CSS siempre voy a utilizar esa constante entonces cuando yo cambio versi\u00f3n o actualice versi\u00f3n del plugin lo cambio en mi cabecera y lo cambio en mi constante y llaman seguro que todos los CSS que est\u00e1n encolados y que van a pasar se reinician no se si sab\u00e9is que cuando la versi\u00f3n dentro de los CSS se mete como un par\u00e1metro al cambiar la versi\u00f3n de encolamiento tambi\u00e9n te hace que te reinician porque si el que cambia cosas de CSS no se muestren bien al usuario a la actualizar entonces esto es muy buena pr\u00e1ctica luego el propio file porque muchas veces hacemos referencia al plugin o sea perd\u00f3n al archivo del plugin principal pues lo meto tambi\u00e9n en una constante la url tambi\u00e9n porque esto se utiliza para encolamiento de CSS y jms nos pide la url donde va a estar nuestro CSS pues lo cojo aqu\u00ed en el principal y luego solo al a\u00f1ado las sus carpetas y sus archivos que tenga esa estructura de play y para terminar cuando hacemos un require o incluye de un archivo si no lo hemos hecho con composers tambi\u00e9n esto nos ahorramos esta funci\u00f3n que se est\u00e1 ejecutando sino que en el propio constante ya la estoy metiendo esta parte es otra cosa que tiene pero estas son las principales que siempre recomendamos para nuestro plugin y aqu\u00ed veis lo que hablamos de pol\u00edtica de seguridad para que no se cargue el PHP que se puede\u2026 Faran tiene un archivo de las distintas formas que se inscriben y ah\u00ed es infinidad de veces esta es una al final es que si no tiene este constante que la define el propio WordPress pues que muera ese PHP que no se pueda terminar ejecutando y\u2026 esta con el fito este que al final crear un plugin es que sobre todo es eso es comunicarse mucho con esos hooks y ver que hooks ejecutan cada momento para que t\u00fa puedes introducir ah\u00ed tu c\u00f3digo o podr\u00e1n modificar la salida que existe ah\u00ed, la salida, el dato o lo que sea en este caso veis que es una funci\u00f3n adfirter a\u00f1adir un filtro y la dicha a\u00f1adir el filtro de title ha metido ah\u00ed directamente la funci\u00f3n esto se puede hacer as\u00ed o se puede referenciar a una funci\u00f3n a una clase, a un momento de una clase f\u00edjate y en un momento te lo hace que Manny hablaba a la IA con las leadings no, no, no, no \u00a1Ey, cante, entro! est\u00e1n pidiendo que cante y lo que est\u00e1 haciendo esa funci\u00f3n que toma el t\u00edtulo porque el t\u00edtulo le ha venido desde el otro lado lo va a poner en funci\u00f3n separada, casi igual se ve s\u00ed, m\u00e1s claro vale, al final lo \u00fanico que estamos haciendo es concatenar s\u00ed, s\u00ed p\u00f3ntelo en el afl\u00edter el nombre de la funci\u00f3n el nombre de la funci\u00f3n ah\u00ed en el segundo que es que esto no te va a ejecutar \u00bfqu\u00e9 es que es? el segundo par\u00e1metro, el nombre de la funci\u00f3n as\u00ed como string aconde que bueno eso el segundo par\u00e1metro es la referencia \u00bfqu\u00e9 es la funci\u00f3n en este caso? simplemente le dec\u00eda el nombre de la funci\u00f3n y luego hay otro par\u00e1metro que veis que hay un 10 que eso es la prioridad con la que se ejecuta esto es porque pueden haber m\u00e1s plugins que ejecuten esto as\u00ed como una vez que deis ponerlo vosotros primero despu\u00e9s etc. y dos es el n\u00famero de par\u00e1metros que va a recibir la funci\u00f3n solamente s\u00f3lo vamos a usar el primero pues hemos puesto dos pero la funci\u00f3n s\u00f3lo tiene uno y da igual as\u00ed como que funciona de todo modo y lo que le estamos diciendo es, vale cuando se ejecuta la funci\u00f3n de title que es la funci\u00f3n esta por defecto que tiene warp y tal en el code que tome ese t\u00edtulo y le a\u00f1adimos ese ssr. como veis en el fitro recibimos la variable original que queramos con ella esa variable puede ser de muchos tipos no tiene porque sea de texto en este caso es una de texto luego sea write de todo cualquier tipo hay alguna cosa que vosotros dig\u00e1is c\u00f3mo se hace esto en un plugin c\u00f3mo funciona d\u00eda y le damos as\u00ed como una pensada agrupal a ver c\u00f3mo se ha d\u00eda para as\u00ed resolver un problema real algo que se pueda ocurrir si no lo preguntamos si no lo preguntamos a chagpp que cosa por ah\u00ed a ver por ejemplo como has mencionado a rice, se me puede ocurrir que cuando metas en un carrito por ejemplo cinco productos te aplique cierto porcentaje del cuento por as\u00ed estar\u00eda viendo a rice y una regla en una p\u00e1gina externa por ejemplo de las primeras de las que vas a\u00f1adiendo vale, y est\u00e1 la busc\u00f3 en spaco vamos a ver c\u00f3mo se hace normalmente para esto porque esto que ha habido de bucomers tienes que mirar en la documentaci\u00f3n de bucomers a ver c\u00f3mo se hace eso claro el problema que has planteado es cuando a\u00f1ades como cinco productos algo as\u00ed que te haga un descuento para eso lo que hay que hacer es modificar el carrito de bucomers y el carrito de bucomers es que tiene un par\u00e1metro tiene un objeto si, un objeto tiene un par\u00e1metro de descuento si no me equivoco bueno, para aplicar el cup\u00f3n puedes cambiar el precio puedes utilizar diferentes estrategias cambiarle el precio o a\u00f1adirle descuento o a\u00f1adirle un cup\u00f3n puedes hacer distintas estrategias tambi\u00e9n como te interesa comercialmente ponerlo en el plugin vamos a buscar una soluci\u00f3n a eso y vamos a hacer m\u00e1s no solo nosotros, tambi\u00e9n vosotros nos miras porque esto obviamente no est\u00e1 preparado no estamos conchabados, \u00bfverdad? no no estamos conchabados entonces este es el momento de buscar en la documentaci\u00f3n \u00bfHas dicho que un array seguramente ser\u00eda un objeto? claro que lo dec\u00eda porque como hab\u00e9is dicho lo de la array igual a alguien nos ha dado programaci\u00f3n no sabe lo que es un array le puede interesar que le expliqu\u00e9is c\u00f3mo funciona un array de la forma b\u00e1sica por si el d\u00eda ma\u00f1ana tiene que hacer algo con un array que sepa para que le puede servir por eso he dicho tambi\u00e9n lo de 5 productos porque tiene que igual darse informaci\u00f3n a alg\u00fan lado claro bueno, ah\u00ed probablemente sea un objeto vamos, ya de cabeza no no recuerdo pero vamos a hacer un objeto que tiene que hacer el cart y ah\u00ed le pueden modificar estas cosas pero est\u00e1 al final en un descuento por cantidad es que al final es eso que por cierto cuando te encuentras este tipo de problemas una forma de ver c\u00f3mo solucionarlos es encontrar un plugin que lo haga y dice y este c\u00f3mo lo hace pasarme el hdmi y a ver si sacamos de aqu\u00ed algo \u00bfLlegas? \u00bfC\u00f3mo llegamos? \u00a1Mira que chingadito! no hemos descargado un plugin estamos viendo como lo hace si, lo he metido en google he puesto \u00bfVocommerce discount by quantity no s\u00e9 qu\u00e9 est\u00e1 ense\u00f1ando una ajuste \u00bfPero qu\u00e9 es esto? bueno, aqu\u00ed por all\u00ed hay una pregunta cuplica parece que hay un filtro que se llama \"willcommerce before calculate hotels\" 10 minutos no parece no me asustes nos quedan tambi\u00e9n mal 10 minutos para las preguntas \u00bfno? \u00a1Ah claro! \u00a1Ah que llevamos 10 minutos! \u00a1Ah que ya! por all\u00ed vas a preguntar tengo el hook \u00bfpor qu\u00e9 lo he usado alguna vez? \u00a1Estupendo! ve salen cosas es \"bookommerce card calculated fees\" \u00bfvale? \"card calculate\" quiz\u00e1 esta f\u00edjate que casualidad \u00bfhay alguien que ha abierto esta? si y cada vez te dice \"ah si perdona\" si que tu ya la agafa pero nosotros no y la agafa la tengo un poquito cuando m\u00e1s comando m\u00e1s no, y comando m\u00e1s no hace nada es un visual es parte de la cosa que me ense\u00f1\u00f3 y es para que si la haces as\u00ed como los m\u00f3viles bueno \u00bfhay alguien que estaba peleando con la un poco el tema de la acci\u00f3n y filtro es muy importante por eso porque fijaros que el hueco siempre va a estar entonces es muy buena pr\u00e1ctica si bueno, fijaos que aqu\u00ed pasa una cosa un poco rara hace un \"action\" hemos visto antes el filtro esto ser\u00eda un \"action\" no s\u00e9 por qu\u00e9 es un \"action\" si modifica un par\u2026 supongo que le a\u00f1ade en lugar de\u2026 con el c\u00e1lculo a lo mejor al final para que ponenle muchas veces tambi\u00e9n la prioridad si queremos que lo haga despu\u00e9s de todos los plugins a lo mejor tenemos una prioridad muy alta hace esto porque realmente bueno, ha tra\u00eddo la funci\u00f3n \"attaction\" realmente la funci\u00f3n \"agaci\u00f3n\" original ser\u00eda\u2026 esto no se lleva muy bien porque lo hacen si, es que\u2026 porque ha tra\u00eddo algo que ya\u2026 que ya est\u00e1 extra\u00eddo entonces, es este \"hook\" veo que llama esta funci\u00f3n y voy a ver esta funci\u00f3n si la encuentro voy a ver qu\u00e9 hace lo que pasa es que el calva que ha dado una funci\u00f3n que se llama \"buckummer\" no s\u00e9 qu\u00e9\u2026 aqu\u00ed est\u00e1 un poco rara esto ya est\u00e1 mal a nivel de revisi\u00f3n de plugins porque no est\u00e1 poder fijar en nombre de la funci\u00f3n as\u00ed que cualquier otro plugin que use este mismo nombre pues va a haber una colisi\u00f3n pero no est\u00e1 dentro del clase, \u00bfno? o si\u2026 ah, si, es verdad, es verdad, est\u00e1 dentro del clase es que como no\u2026 si, no lo ha tra\u00eddo bueno, un comentario a esto que est\u00e1n hablando los prefijos que no lo hab\u00edamos dicho hay que prefijar siempre las funciones en las clases nosotros hace poco cambiamos la directiva de tres d\u00edgitos a cuatro que sean los\u2026 suficientemente distinguirlas de otros entonces, normalmente lo que dec\u00edamos un poco los \"lou\" son decisiones que tenemos que tomar que luego van a venir bien el futuro hay que utilizar cuatro d\u00edgitos y en esta clase por ejemplo, lo han puesto tres d\u00edgitos que es m\u00e1s m\u00e1s, \u00bfno? \"what\" un bajo disco tambi\u00e9n como\u2026 es una directiva que hemos puesto hace un relativante poco bueno, lleva m\u00e1s tiempo bueno, pues claro, los plugins que ya estaban no pueden cambiar a partir de ahora si dice cuatro d\u00edgitos pues, vamos a ver lo que hace es una funci\u00f3n que se llama \"bookomers custom search age\" que es como\u2026 lo que a\u00f1adirle algo adicional de dinero, de dinerito a arcarrito y veo que lo que hace es que bueno, aqu\u00ed toma algo se da alguna comprobaci\u00f3n aqu\u00ed toma como un descuento lo multiplica por menos uno claro, porque le est\u00e1 a\u00f1adiendo un \"sack change\" entonces claro, si multiplica un descuento por menos uno se convierte en un antidescuento (risas) a veces hay que hacer las cosas las cosas un poco chapucedas (risas) y luego lo que hace es que aqu\u00ed lo\u2026 toma una variable la divide entre el total de descuento que hay en el carrito y le suma uno supongo que esto sea para hacer un porcentaje puede ser, no s\u00e9 y\u2026 y luego compreva\u2026 esto se va a apagar con alguna comprobaci\u00f3n (risas) vale, perd\u00f3n, perd\u00f3n perd\u00f3n, es que\u2026 se hubiera un se\u00f1or mayor con esto, f\u00edjate (risas) y lo que hace es que aqu\u00ed hace una comprobaci\u00f3n aqu\u00ed abajo no hace nada m\u00e1s, as\u00ed que de aqu\u00ed para abajo lo podemos ignorar de aqu\u00ed tiene una\u2026 una llamada bucomerscart@fi y a\u00f1ade como una reducci\u00f3n en el carrito al precio que supongo que habr\u00eda Paco, \u00bft\u00fa qu\u00e9 tienes? el este levantado puede montar la funci\u00f3n para ver si podemos aunque sea de forma superest\u00e1tica (risas) pues se llama buadvance discounts no lo pego por\u2026 (risas) (risas) (risas) mira, \u00bfeh? (risas) \u00bfc\u00f3mo se llama? el\u2026 el\u2026 el\u2026 el\u2026 te lo pongo m\u00e1s grande con mi mano super m\u00e1gica que fuerte se me escucha (risas) (risas) (risas) buadvance discounts pero si no preguntan a la IA si la IA te lo va a montar vale, vale (risas) mientras que ah\u00ed se maneja Paco me gustar\u00eda comentar buenas pr\u00e1cticas segu\u00ed hablando buenas pr\u00e1cticas ayer en el contributo estuve hablando de utilizar un control de versiones es importante hay muchos en el mercado el m\u00e1s conocido guija esto que hace que y sobre todo con con distintas directivas para poder hacer codigos de otros por ejemplo utilizamos Kid Ignore para las carpetas vendors que no se guarden ehh\u2026 ehh\u2026 liber\u00edas de terceros, vale pero si a la hora de distribuir plugins lo podemos hacer y\u2026 utilizar una estrategia de ramas para poder trabajar con ellas, vale hay una que es muy conocida tambi\u00e9n \u00faltimamente que te permite hacer este unitario y es\u2026 o mismo que los mirejes TBD TBTrand based development y funciona muy bien entonces control de versiones para tener otro c\u00f3digo siempre versionado y\u2026 y utilizar estrategias de ramas funciona muy bien \u00bfFruro tiene? \u00bflo pasamos? si es que hay un nip directamente aqu\u00ed pero si pasaselo vale pero cuartemos que tiene vamos bueno, ya se ha dado una cosa ah\u00ed a ver, la cosa tambi\u00e9n es terminar toda la instalaci\u00f3n de boomcomber hay que crear productos, hay que crear un mont\u00f3n de cosas no, te viene ya uno no, no, no, no, no creo que no me queda ninguno por eso estaba viendo un poco \u00bfla capital est\u00e1 aqu\u00ed por dentro? ya, est\u00e1 el CSV est\u00e1 el CSV ya, ya pero mira, tiene aqu\u00ed un nip, es Paco te lo paso por\u2026 por Slack mmmm pasame la URL por\u2026 no te voy a quitar no voy a abrir el Slack aqu\u00ed lo comprende ah\u00ed eh, m\u00e1s cosillas a veces ten\u00eda preparado toda la parte de scaping, cosas que\u2026 eso nos va a hablar si, pues vamos a comentar sobre los scaping comentamos, mientras monta eso comentamos sobre los scaping ahora lo tengo t\u00fa aqu\u00ed lo aqu\u00ed aguantada la alfaca claro creo que hace boletillas es que no por m\u00e1s que no da tiempo ha hecho todo esto vamos a ver bueno, ten\u00e9s que ir y decirles si nos dan la tarde tambi\u00e9n para seguir con esto toda la tarde y ma\u00f1ana tambi\u00e9n vais a venir aqu\u00ed vale, igualmente al final lo comentas, aqu\u00ed tenemos el filtro, vale con lo que ser\u00eda vale, ya la funci\u00f3n es bastante sencilla la prioridad aqu\u00ed importante yo le pondr\u00e9 una prioridad m\u00e1s alta, de 10 darnos cuenta que las prioridades van por sartas de 5 o de 10, casi todos de 10 10, 20, 30, 40 eso lo haces para que puedan, para darte espacio a ti a meter una prioridad de 9 o 5 normalmente, para que vayas antes o despu\u00e9s y luego, pues si ten\u00e9s que ir a 99, pues te va a 99 y ya sabes que normalmente es la \u00faltima claro, a ver, tambi\u00e9n como termin\u00e9 todo esto se llama muy largo, vale, y nos quedan 10 minutos si, si, si, bueno, nos pon\u00edamos menos hace 10 minutos quedaban 10 minutos, vale una cosa que nos tiene que quedan bastante claro, vale es esta parte de la documentaci\u00f3n de aqu\u00ed, vale, que es toda la parte de de recibir y mandar datos, vale, que eso s\u00ed que es una cosa que queremos que quede claro por el de hecho, vale, de que esto genera uno de los problemas de seguridad m\u00e1s comunes de internet y m\u00e1s explotado, vale que al final, poder recibir inyesiones, vale, en nuestra p\u00e1gina, vale por eso, siempre tenemos que seguir una directriz, vale que escapa lo m\u00e1s temprano que pueda, o sea sanitiza, no, lo sanitiza sanitiza lo m\u00e1s temprano que pueda vale, o sea, cuando recibimos un dato por un post, por cualquier sitio, vale, por una llamada tenemos que sanitizar y con las funciones que nos da WordPress, vale, que no tenemos que reinventar lo que es el ciclo, vale ya WordPress tenemos un mont\u00f3n de funciones de sanitizado con los que vamos a poder desinfectar lo que ya recibamos, vale una vez de esto, vamos a validarlo, vamos a validar siempre, siempre siempre, siempre, siempre validar lo que recibeis, vale y nunca fui de lo que teng\u00e1is guardar la base vale, as\u00ed que siempre escaparlo, no es que es el post, bueno y quien dice que no hayan infectado la entrada cualquier cosa, eso ten\u00e9is que tenerlo en cuenta, no solo por vuestro plugin, sino por el resto de plugin o resto de la instalaci\u00f3n, vale porque no vayas a saber si el plugin de verdad lab esta tiene una vulnerabilidad una cosa muy t\u00edpica tambi\u00e9n de sanitizado es la API, cuando te conecta una API a ver, normalmente no debes estar infectada la API, pero te pueden infectar la API, lo que te traes de la API tienes tambi\u00e9n que sanitar y al final, como que no te f\u00edas de nadie de qui\u00e9n te va a traer, si es de la base de actos, si es de una API extena o cualquier cosa si, como adem\u00e1s uno pide pan, eso da igual sanitar los cinco veces, da igual no va a ser algo que a\u00f1ada mucho tiempo de ejecuci\u00f3n, as\u00ed que hay distintos tipos de funciones de sanitizado seg\u00fan la variabilidad que te traigan por ejemplo email si es un texto si es un t\u00edtulo, etc\u00e9tera sanitiza el t\u00edtulo, me parece que lo que hace es que lo van a cometer eso y siempre utilizarla, que convengan ese momento no utilicemos una gen\u00e9rica si no nos quedamos muy claros, pues entramos en cualquiera de ellas y vemos lo que ejecuta, vale, esto es el pan de cada d\u00eda, vale igual que con el resto, yo recomiendo con el resto de funciones lo mismo, vale revisarlo, porque siempre nos f\u00edjamos de muchas funciones de WordPress como el Detight, hay un mont\u00f3n de funciones que nos f\u00edjamos pero quien nos dice si est\u00e1s protegido o no por la \u00fanica forma es entrar aqu\u00ed y ver si est\u00e1n protegidos o no para saber si necesitamos escaparlo o no cuando lo saquemos, esa informaci\u00f3n vale, hay una pregunta \u00bfHas comentado el tema de tiempo de ejecuci\u00f3n? Me imagino a ver, por ya obtenerlo en cuenta de cara al futuro que las que m\u00e1s a\u00f1adan ser\u00e1n peticiones a la base de datos me imagino que m\u00e1s a\u00f1adan tiempo de ejecuci\u00f3n porque eso es la que te reelevan solo es ser relevante la cosa es que las llamadas a base de datos si usan las funciones por defecto de WordPress el URL que edit\u00f3 todo esto realmente no importa tanto si consultan la misma informaci\u00f3n cinco veces porque el cuerpo de WordPress la cach\u00e9a y no vuelve a consultar a la base de datos cuando ya lo ha hecho pero s\u00ed, la base de datos es uno de los factores m\u00e1s importantes cuando se analista por qu\u00e9 una web tarda mucho en ejecutarse una de las cosas que miras es cu\u00e1ntas queries se est\u00e1 lanzando a la base de datos y ves que est\u00e1 lanzando 400, 500, 600 es un poco exagerado en plan se llama query monitor me imagino que lo conocer\u00e9is que ah\u00ed te dicen las query y las peticiones que hace es un poco para rendimiento de la p\u00e1gina claro, era de cara a me imagino que vosotros que habr\u00e9is visto mucho m\u00e1s si pod\u00edais decir los t\u00edpicas 3 a 5 razones por las que m\u00e1s se te sobrecarga a lo mejor un plugin de cara a si eso generalmente si pretes llamar query a la base de datos o si hab\u00eda alguna otra cosa que supieres otra tambi\u00e9n muy t\u00edpica hace peticiones a una API que te traiga entonces hay una buena pr\u00e1ctica, utilizas transient que guarden base de datos el valor de esa API y ya no te has que estar pidiendo continuamente una API otra cosa que no deb\u00e9is de hacer o evitarlo es llamar librer\u00edas de fuera vamos a intentar siempre tener las librer\u00edas en nuestro plugin, o sea, no la descargamos y la instalamos t\u00edpico Google Phone por ejemplo bueno, hay cosas concretas que s\u00ed podemos llamar fuera, como fuentes y dem\u00e1s que est\u00e1 permitido hay mucho para tenerla dentro pero por ejemplo en el repo s\u00ed est\u00e1 permitido pero muchas gente, un slider que da\u00f1an de un slider por ejemplo un carruxer, coge la librer\u00eda del JSA y la cogen en un external siempre es mejor tenerla dentro del propio plugin de hecho nosotros pedimos que lo hagan salvo excepciones, como fuentes porque el CDN bueno, el de vuestra te mete un segundo de lazo a la hora de cargar la p\u00e1gina que es brutal claro, el de vuestra gratuito no vuestra, no perd\u00f3n, es de phone a Weesson phone a Weesson es brutal entonces os tra\u00edis dos archivos, que es CSS y los iconos pues ah\u00ed te quita bastante y tambi\u00e9n importante revisar qu\u00e9 librer\u00eda tiene Word, pero de por s\u00ed porque siempre es lo supert\u00edpico y Word tiene una lista de librer\u00eda ya cargada que es bastante grande as\u00ed que siempre revisarlo adem\u00e1s en la versi\u00f3n se van a ver si se a\u00f1aden cosas nuevas as\u00ed que es una cosa, te\u00f1ar d\u00eda que s\u00ed que va venir bastante bien y tambi\u00e9n m\u00e1s all\u00e1 de la eficiencia hablando de las librer\u00edas que se cargan desde fuera hace unos meses sucedi\u00f3 que una librer\u00eda muy famosa que cargaba mucha gente, no recordaba el nombre pero la manten\u00eda alguien y una empresa china le compr\u00f3 el dominio de su web entonces empezaron a meter Marwar en toda la gente que estaba cargando esa librer\u00eda a trav\u00e9s de su cdn entonces bueno tambi\u00e9n por seguridad, claro, siempre va a ser mejor que la cargue a tu mismo tambi\u00e9n me aprecia una pregunta hola, qu\u00e9 tal me ha parecido muy interesante quer\u00eda hacer una punta en el tema del desarrollo del plugin cuando hab\u00e9is creado el filtro es buena pr\u00e1ctica tambi\u00e9n comprobar que existe el filtro y que existe la funci\u00f3n a la que llama porque si no se te cae toda la p\u00e1gina si no existiera el filtro o no existiera la funci\u00f3n a la que se est\u00e1 llamando no pasa nada si no existiera el filtro no pasar\u00eda nada si no existiera la funci\u00f3n si no existiera la funci\u00f3n si no existiera la funci\u00f3n para comprobar lo que es la funci\u00f3n m\u00e1s que el filtro yo puedo efectos y lo suelo poner porque a veces incluso dependiendo de otro plugin en el caso del requires, yo no conoc\u00eda que se pod\u00eda solicitar que otro plugin estuviera activado y presente en el sistema porque es lo que dec\u00eds que desativa Google Comerz por una actualizaci\u00f3n o lo que sea y si hay un plugin que est\u00e1 llamando esas funciones como no las encuentras t\u00fa va toda la p\u00e1gina de hecho esa cabecera que se program\u00f3 no te permite desactivar el padre vale y luego una pregunta en el tema de la vulnerabilidad es que es un tema s\u00faper importante vosotros ten\u00e9is un prefiltro o alg\u00fan tipo de software que os haga un an\u00e1lisis inicial pero yo por ejemplo lo estoy haciendo para un proyecto y con Quimera te va analizando pues todo el tema de cadenas que no se escapan de llamadas conflictivas o rl y la verdad que ha alucinado bastante porque adem\u00e1s analiza toda la p\u00e1gina y vienen todos los plugins y hay algunos que tienen unas vulnerabilidades de ejecuci\u00f3n de c\u00f3digo directamente que puedes inyectar lo que quieras. Hay un proyecto que tenemos en el equipo que es abierto que lo pod\u00e9is descargar que se llama plugin check plugin y tiene un mont\u00f3n de ejecuci\u00f3n a todos como hemos estado hablando de te da un interfalo, t\u00fa me abriendo ayer en el contributo y entonces lo que haces es que lo instala en tu work esto siempre intenta ejecutarlo en local lo que le dec\u00eds que plugin quere analizar y te da un informe bastante desobstivo de un mont\u00f3n de vulnerabilidades que pueden tener. Entonces esta herramienta lleva ya tiempo con un a\u00f1illo por ah\u00ed con nosotros y est\u00e1 funcionando muy bien y lo pod\u00e9is usar sin problema y adem\u00e1s el proyecto est\u00e1 abierto en Gija para que pod\u00e1is contribuir cualquiera de vosotros vale que un ISO un public with aqu\u00ed en alg\u00fan contributo se ha hecho alg\u00fan public que ahora es que ten\u00e9is el proyecto para que pod\u00e1is ver como va el proceso actuar, cu\u00e1les son los checks que tenemos activos, esto no pod\u00e9is revisar aqu\u00ed igual que si alguien se anima puede contribuir aqu\u00ed y poner lo que quieras. Aqu\u00ed pod\u00e9is ver el listado el listado de checks que hay ahora mismo que hay unos cuantos y por ejemplo lo que estaba hablando en Paco el escapado de ir sanitizado y te dice que lo donde es porque a ver son tanto c\u00f3digos en Plagio tambi\u00e9n m\u00e1s complejos pues m\u00e1s dif\u00edcil o m\u00e1s f\u00e1cil que se te escape algo y te haces por una herramienta te ayuda mucho por ah\u00ed hay una pregunta s\u00ed, s\u00ed tiene una duda es que b\u00e1sicamente utilizamos los plugins para crear funciones a medida de un cliente entonces, quieres saber si hay alguna forma igual que hay un que puedes pedir la carga de otro plugin si puedes tambi\u00e9n pedir controlar que te haces un tema determinado que tenga que un tema, o sea para que el plugin se ejecuta te va a tener un tema que t\u00fa ya has creado o un comercial entiendo que s\u00ed porque t\u00fa el tema se guarda en la tabla de opciones y t\u00fa tomas para que te vete la funci\u00f3n getoption y se llama theme\/slash o algo as\u00ed o Carren theme es una de ellas y ah\u00ed te dice pues el nombre de la carpeta del tema el nombre de la carpeta del tema que hay en este momento cargado con eso lo puedes comprobar tambi\u00e9n si el tema por lo que sea incluye una funci\u00f3n o una clase o lo que sea pues puedes comprobar si la funci\u00f3n existe o si la clase existe y con eso puedes verlo porque no estoy seguro si eso va a funcionar de todo porque depende tambi\u00e9n del momento de la ejecuci\u00f3n que es que a m\u00ed me no s\u00e9 si los plugins cargan antes o despu\u00e9s del tema y ya lo puedes comprobar dentro de hooks porque seguramente hay un hook que sea despu\u00e9s de que cargue el tema hay un hook que activa el plugin despu\u00e9s de que cargue el tema compr\u00faebame si existe cierto tema y ya a partir de ah\u00ed puede empezar a ejecutar tu c\u00f3digo si a veces tienes dudas de c\u00f3mo se hace esto hay un mont\u00f3n de temas que te dicen oye tengo el requerimiento de este y este plugin ah\u00ed se puede ver f\u00e1cilmente como se realizar\u00eda la mejor forma de ver c\u00f3mo se hace todas cosas de WordPress es viendo alguien que ya ha hecho ya que es OpenSor y eso es lo beneficio que nos da OpenSor poder ver como la hecho otro claro y una cosa que hay que tener en cuenta es que en el desarrollo es el orden de ejecuci\u00f3n porque cuando se cargan todos los plugins si tu plugin empieza por la A y quieres comprobar si hay un plugin cargado que empieza por la B no puedes hacerlo antes de que carguen todos los plugins hay un action que se llama plugins loaded que se ejecuta despu\u00e9s de que cargan todos los plugins pero fuera de ese si tu plugin por a veces da dios est\u00e1 antes que el otro porque tu plugin se ejecuta antes que el otro t\u00e9cnicamente como veis podr\u00edamos estar todo el d\u00eda hablando de plugins y nada m\u00e1s que nos en el pasillo donde hay nos preguntan las pasillas porque a la un\u00edmedia la foto de familia y no vamos a salir no s\u00e9 si hay alguna pregunta m\u00e1s alguna pregunta r\u00e1pida o venga vamos a hacernos la foto muchas gracias [M\u00fasica]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ordion content.<\/p>\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>Ponentes: Francisco Torres, Paco Marchante y yo, David P\u00e9rez Tuvimos la oportunidad de estar en la WordCamp Madrid 2025 compartiendo un taller donde ense\u00f1amos a crear un plugin en WordPress desde cero. La idea era hacerlo sencillo, din\u00e1mico y adaptado al nivel de cada persona en la sala, as\u00ed que lo planteamos como un paso [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":7,"footnotes":""},"categories":[169],"tags":[],"class_list":["post-4136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-charlas"],"_links":{"self":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/comments?post=4136"}],"version-history":[{"count":1,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4136\/revisions"}],"predecessor-version":[{"id":5953,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4136\/revisions\/5953"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/media\/5744"}],"wp:attachment":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/media?parent=4136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/categories?post=4136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/tags?post=4136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}