{"id":127,"date":"2026-06-02T15:49:44","date_gmt":"2026-06-02T15:49:44","guid":{"rendered":"https:\/\/www.yuridek.com\/blog\/?p=127"},"modified":"2026-06-08T21:09:45","modified_gmt":"2026-06-08T21:09:45","slug":"how-i-created-a-wordpress-plugin","status":"publish","type":"post","link":"https:\/\/www.yuridek.com\/blog\/2026\/06\/02\/how-i-created-a-wordpress-plugin\/","title":{"rendered":"How I created a WordPress plugin"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"127\" class=\"elementor elementor-127\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63f73d3f e-flex e-con-boxed e-con e-parent\" data-id=\"63f73d3f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3e068342 elementor-widget elementor-widget-text-editor\" data-id=\"3e068342\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\n<p class=\"wp-block-paragraph\"><a href=\"#spanish\">Versi\u00f3n en Espa\u00f1ol aqu\u00ed<\/a><\/p>\n<hr \/>\n<p><br \/><a href=\"https:\/\/www.yuridek.com\/blog\/2026\/06\/02\/how-i-built-a-web-app-using-codex\/\">Please read the previous post if you have&#8217;t already, so you can understand the context<\/a>.<\/p>\n<p>Once <a href=\"https:\/\/squishy.yuridek.com\/\" target=\"_blank\" rel=\"noopener\">Squishy<\/a> was up and running on the server, we used Codex to create the WordPress plugin. The idea behind the plugin was no longer to compress images itself, but to connect WordPress with Squishy. The workflow became much clearer:\u00a0<\/p>\n\n<ol class=\"wp-block-list\">\n<li>the user uploads an image to WordPress,\u00a0<\/li>\n\n<li>the plugin sends it to Squishy,\u00a0<\/li>\n\n<li>Squishy optimises it\u00a0<\/li>\n\n<li>and WordPress receives a lighter version.<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\">This means the site can use AVIF or WebP images without placing too much of a strain on the server where WordPress is installed.<\/p>\n\n<p class=\"wp-block-paragraph\">We also improved the workflow within the media library and Elementor, so that users would receive more feedback and wouldn\u2019t be left staring at confusing statuses like \u2018queued\u2019 or \u2018processing\u2019 without understanding what was happening. We have to go through a series of iterations to refine the product step by step. Detail by detail.<\/p>\n\n<h2><strong>Why This Approach Was Better<\/strong><\/h2>\n\n<p class=\"wp-block-paragraph\">Because it separates responsibilities. WordPress handles the site, the content and the media library. Squishy handles the heavy-duty optimisation.<\/p>\n\n<p class=\"wp-block-paragraph\">If we had left all the compression within the plugin, each site would depend on the quality of the hosting where it is installed. Some servers might handle it well, others might fail, and others might not support AVIF at all.<\/p>\n\n<p class=\"wp-block-paragraph\">By running Squishy on our own server, we have better control over the environment. This allows for more consistent results, less load on WordPress, and a tool that can improve over time without relying so heavily on individual hosting providers.<\/p>\n\n<h2><strong>The Interesting Thing About All This<\/strong><\/h2>\n\n<p class=\"wp-block-paragraph\">The interesting thing is that Squishy didn\u2019t start out as a brilliant product idea. It arose from a concern directly related to productivity in my work, namely how to automate a process that is currently done manually. (This is where that UX Law comes in\u2014I can\u2019t quite remember the name\u2026).<br \/><br \/>And that is, having to deal with images that are far too large.<\/p>\n\n<p class=\"wp-block-paragraph\">But in trying to solve that problem properly, the natural progression was to create:<\/p>\n\n<ol class=\"wp-block-list\">\n<li>First, a local tool,\u00a0<\/li>\n\n<li>then a web app,\u00a0<\/li>\n\n<li>then an API\u00a0<\/li>\n\n<li>and finally an integration with WordPress.\u00a0<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\">In other words, a small need ended up becoming a tool of our own with real potential. I think that as we\u2019re in the midst of a revolution, the full picture isn\u2019t yet clear, but by taking part in the process we\u2019re creating value, albeit organically, based on our own needs.<\/p>\n\n<h2><strong>If You Want to Create Your Own Apps Too<\/strong><\/h2>\n\n<p class=\"wp-block-paragraph\">If you\u2019re a designer, a freelancer or someone who builds websites, I think this path can open up a whole host of possibilities. It\u2019s not about suddenly becoming a full-stack developer or knowing everything from the get-go, but you can deliver value by creating your own tools, and that shifts the paradigm of what designers have traditionally been.<\/p>\n\n<p class=\"wp-block-paragraph\">It\u2019s about identifying repetitive processes, time-consuming tasks or problems that your clients might also face. From there, you can start small: a simple app, an automation, an integration or an internal tool.<\/p>\n\n<p class=\"wp-block-paragraph\">The important thing is to change the way you look at your work. Don\u2019t just ask yourself \u201chow do I design this?\u201d, but also \u201cwhat tool could I create to solve this better and thus deliver value to my clients?\u201d<\/p>\n\n<h2><strong>The New Era of the Designer-Toolmaker<\/strong><\/h2>\n\n<p class=\"wp-block-paragraph\">For me, Squishy embodies an idea I want to continue exploring: designers no longer need to limit themselves to designing interfaces, brands or websites. They can also create their own tools.<\/p>\n\n<p class=\"wp-block-paragraph\">Tools that arise from real-world experience, from specific problems and from a sensitive understanding of how people work. That blend of design, judgement, technology and craftsmanship is what I\u2019d like to call The New Era of the Designer-Toolmaker.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\n<hr class=\"e-2d2d882-894938f e-divider-base\" data-interaction-id=\"2d2d882\"  data-e-type=\"widget\" data-id=\"2d2d882\" \/>\n\t\t\t\t<div class=\"elementor-element elementor-element-d50f8e4 elementor-widget elementor-widget-text-editor\" data-id=\"d50f8e4\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"spanish\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\n<h1 class=\"p1\"><b>Como cre\u00e9 un plugin para WordPress<\/b><\/h1>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.yuridek.com\/blog\/2026\/06\/02\/how-i-built-a-web-app-using-codex\/\">Por favor, lee la entrada anterior si a\u00fan no lo has hecho, para que puedas entender el contexto<\/a>.<\/p>\n<p class=\"p1\">Despu\u00e9s de tener <a href=\"https:\/\/squishy.yuridek.com\/\" target=\"_blank\" rel=\"noopener\">Squishy<\/a> funcionando en el servidor, creamos con Codex el plugin para WordPress. La idea del plugin ya no era comprimir im\u00e1genes por s\u00ed mismo, sino conectar WordPress con Squishy. El flujo qued\u00f3 mucho m\u00e1s claro:<\/p>\n<ol class=\"ol1\">\n<li class=\"li1\">el usuario sube una imagen a WordPress,<\/li>\n<li class=\"li1\">el plugin la env\u00eda a Squishy,<\/li>\n<li class=\"li1\">Squishy la optimiza<\/li>\n<li class=\"li1\">y WordPress recibe una versi\u00f3n m\u00e1s liviana.<\/li>\n<\/ol>\n<p class=\"p1\">As\u00ed el sitio puede usar una imagen AVIF o WebP sin exigirle demasiado al servidor donde est\u00e1 instalado WordPress.<\/p>\n<p class=\"p1\">Tambi\u00e9n fuimos mejorando el flujo dentro de la biblioteca de medios y Elementor, para que el usuario tuviera m\u00e1s feedback y no se quedara mirando procesos confusos como \u201cqueued\u201d o \u201cprocessing\u201d sin entender qu\u00e9 estaba pasando. Hay que ir pasando por una serie de iteraciones para ir perfeccionando el producto paso a paso. Detalle por detalle.<\/p>\n<h2 class=\"p3\"><b>Por Qu\u00e9 Este Enfoque Fue Mejor<\/b><\/h2>\n<p class=\"p1\">Porque separa responsabilidades. WordPress se encarga del sitio, del contenido y de la biblioteca de medios. Squishy se encarga de la optimizaci\u00f3n pesada.<\/p>\n<p class=\"p1\">Si hubi\u00e9ramos dejado toda la compresi\u00f3n dentro del plugin, cada sitio depender\u00eda de la calidad del hosting donde est\u00e1 instalado. Algunos servidores podr\u00edan hacerlo bien, otros podr\u00edan fallar, y otros directamente no tendr\u00edan soporte para AVIF.<\/p>\n<p class=\"p1\">Al tener Squishy en un servidor propio, controlamos mejor el entorno. Eso permite resultados m\u00e1s consistentes, menos carga para WordPress y una herramienta que puede mejorar con el tiempo sin depender tanto de cada hosting individual.<\/p>\n<h2 class=\"p3\"><b>Lo Interesante De Todo Esto<\/b><\/h2>\n<p class=\"p1\">Lo interesante es que Squishy no naci\u00f3 como una gran idea de producto. Naci\u00f3 de una inquietud relacionada directamente con la productividad en mi trabajo, y es c\u00f3mo automatizar un proceso que hoy en d\u00eda se hace de forma manual. ( Aqu\u00ed hablar de esa UX Law que no recuerdo el nombre\u2026).<br \/><br \/>Y esto es, tener que lidiar con im\u00e1genes demasiado pesadas.<\/p>\n<p class=\"p1\">Pero al intentar resolver bien ese problema, lo natura fue hacer:<\/p>\n<ol class=\"ol1\">\n<li class=\"li1\">Primero fue una herramienta local,<\/li>\n<li class=\"li1\">despu\u00e9s una web app,<\/li>\n<li class=\"li1\">luego una API<\/li>\n<li class=\"li1\">y finalmente una integraci\u00f3n con WordPress.<\/li>\n<\/ol>\n<p class=\"p1\">Es decir, una peque\u00f1a necesidad termin\u00f3 convirti\u00e9ndose en una herramienta propia con potencial real. Creo que como estamos al medio de una revoluci\u00f3n a\u00fan no tenemos completa la pel\u00edcula, pero tomando parte del proceso vamos creando valor, pero de forma org\u00e1nica, bas\u00e1ndonoslos en nuestras necesidades.<\/p>\n<h2 class=\"p3\"><b>Si T\u00fa Tambi\u00e9n Quieres Crear Tus Propias Apps<\/b><\/h2>\n<p class=\"p1\">Si eres dise\u00f1ador, freelancer o trabajas creando sitios web, creo que este tipo de camino puede abrir muchas posibilidades. No se trata de convertirse de golpe en desarrollador full stack ni de saberlo todo desde el inicio, pero si puedes entregar valor creando tus propias herramientas y eso cambia el paradigma de lo que los dise\u00f1adores hab\u00edan sido hasta ahora.<\/p>\n<p class=\"p1\">Se trata de detectar procesos que se repiten, tareas que consumen tiempo o problemas que tus clientes tambi\u00e9n podr\u00edan tener. Desde ah\u00ed puedes empezar peque\u00f1o: una app simple, una automatizaci\u00f3n, una integraci\u00f3n o una herramienta interna.<\/p>\n<p class=\"p1\">Lo importante es cambiar la forma de mirar el trabajo. No solo preguntarse \u201c\u00bfc\u00f3mo dise\u00f1o esto?\u201d, sino tambi\u00e9n \u201c\u00bfqu\u00e9 herramienta podr\u00eda crear para resolverlo mejor y as\u00ed entregar valor a mis clientes?\u201d<\/p>\n<h2 class=\"p3\"><b>La Nueva Era Del Dise\u00f1ador-Herramentista<\/b><\/h2>\n<p class=\"p1\">Para m\u00ed, Squishy representa una idea que quiero seguir explorando: el dise\u00f1ador ya no tiene por qu\u00e9 limitarse solo a dise\u00f1ar interfaces, marcas o sitios web. Tambi\u00e9n puede crear herramientas propias.<\/p>\n<p class=\"p1\">Herramientas que nacen desde la experiencia real, desde problemas concretos y desde una mirada sensible sobre c\u00f3mo trabajan las personas. Esa mezcla entre dise\u00f1o, criterio, tecnolog\u00eda y oficio es lo que me interesa llamar\u00a0La Nueva Era del Dise\u00f1ador-Herramentista.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Building a custom WordPress plugin became more than a technical experiment \u2014 it revealed a new way designers can create value through their own tools. This post explores how AI-assisted development helped transform a repetitive workflow into a scalable system connecting WordPress, APIs, and image optimisation.<\/p>\n","protected":false},"author":1,"featured_media":128,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"https:\/\/www.yuridek.com\/blog\/wp-content\/uploads\/2026\/06\/How-I-created-a-WordPress-plugin-Facebook.jpg","_seopress_social_fb_img_attachment_id":351,"_seopress_social_fb_img_width":1640,"_seopress_social_fb_img_height":856,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"https:\/\/www.yuridek.com\/blog\/wp-content\/uploads\/2026\/06\/How-I-created-a-WordPress-plugin-X.jpg","_seopress_social_twitter_img_attachment_id":352,"_seopress_social_twitter_img_width":1200,"_seopress_social_twitter_img_height":630,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-127","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":10,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":507,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions\/507"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/media\/128"}],"wp:attachment":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}