{"id":1438,"date":"2026-10-23T15:00:00","date_gmt":"2026-10-23T15:00:00","guid":{"rendered":"https:\/\/lucumaagency.com\/?p=1438"},"modified":"2026-10-21T05:21:33","modified_gmt":"2026-10-21T05:21:33","slug":"como-hacer-un-plugin-a-medida-en-wordpress-y-cuando-vale-la-pena","status":"publish","type":"post","link":"https:\/\/lucumaagency.com\/en\/como-hacer-un-plugin-a-medida-en-wordpress-y-cuando-vale-la-pena\/","title":{"rendered":"C\u00f3mo hacer un plugin a medida en WordPress y cu\u00e1ndo vale la pena"},"content":{"rendered":"<p>Hay un momento, en bastantes proyectos, en que la b\u00fasqueda del plugin correcto se convierte en el problema. Probaste tres, ninguno hace exactamente lo que necesitas, dos est\u00e1n abandonados y el que m\u00e1s se acerca trae cuarenta opciones que no vas a usar. En ese punto conviene parar y hacer la pregunta inc\u00f3moda: <strong>\u00bfno sale m\u00e1s barato programarlo?<\/strong><\/p>\n<p>La respuesta es que s\u00ed, m\u00e1s veces de las que parece. Y tambi\u00e9n que no, en casos muy concretos. Esto es c\u00f3mo decidimos, con tres casos propios en la mesa.<\/p>\n<h2>Qu\u00e9 es realmente un plugin a medida<\/h2>\n<p>No es un sistema. Es un archivo PHP con una cabecera que WordPress reconoce, y dentro, c\u00f3digo que se engancha a los puntos donde WordPress te deja intervenir: antes de mostrar un producto, al guardar un pedido, al pintar un campo del checkout.<\/p>\n<p>Eso significa dos cosas importantes para decidir:<\/p>\n<ul>\n<li><strong>El alcance puede ser peque\u00f1\u00edsimo.<\/strong> Un plugin de 200 l\u00edneas es un plugin perfectamente v\u00e1lido, y a menudo resuelve lo que uno de 20.000 l\u00edneas hace mal.<\/li>\n<li><strong>Se puede desactivar.<\/strong> A diferencia de tocar el tema, si algo sale mal lo apagas y el sitio vuelve a como estaba. Esa es exactamente la raz\u00f3n por la que estas cosas van en un plugin y no en el tema.<\/li>\n<\/ul>\n<h2>Tres casos reales y por qu\u00e9 se decidieron as\u00ed<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/lucumaagency.com\/wp-content\/uploads\/2026\/10\/tres-casos-plugin-a-medida.png\"\n     alt=\"Tres casos de plugin a medida: campos de Per\u00fa en el checkout con 1.835 distritos, aroma incluido en una tienda de difusores, y conexi\u00f3n de un formulario con el CRM de una inmobiliaria\"><\/p>\n<p><strong>Caso 1: los campos peruanos del checkout.<\/strong> Vaporis, una tienda de difusores y fragancias de Lima, necesitaba dos cosas en su proceso de compra: DNI validado de verdad y distrito elegido de una lista, no escrito a mano. Probamos tres plugins de ubigeo del mercado y ninguno funcion\u00f3 como hac\u00eda falta.<\/p>\n<p>Lo escribimos nosotros: los 25 departamentos, 197 provincias y 1.835 distritos del pa\u00eds, con validaci\u00f3n del DNI en el servidor y, sobre todo, el <strong>c\u00f3digo de ubigeo de seis d\u00edgitos<\/strong> guardado en cada pedido. Ese c\u00f3digo es lo que piden la facturaci\u00f3n electr\u00f3nica y los couriers, y es justo lo que ninguno de los tres plugins guardaba. El archivo de datos pesa 45 KB y solo se carga en el checkout.<\/p>\n<p><strong>Caso 2: un aroma incluido con cada producto.<\/strong> La misma tienda vende equipos difusores y quer\u00eda que cada uno incluyera un aroma a elecci\u00f3n del cliente, a precio cero, respetando la capacidad que corresponde a ese equipo. Ning\u00fan plugin del mercado maneja esa regla, porque es una regla del negocio, no una funci\u00f3n gen\u00e9rica.<\/p>\n<p>Aqu\u00ed apareci\u00f3 el costo oculto del desarrollo a medida: la primera versi\u00f3n funcionaba, pero cargaba cientos de variaciones de producto en cada visita a la ficha y el sitio se arrastraba. La segunda versi\u00f3n guarda ese mapa en memoria y lo invalida solo cuando cambian los productos. Ese ajuste fue parte de la cadena que llev\u00f3 el \u00abagregar al carrito\u00bb de 8 segundos a 1,5, que contamos entera en <a href=\"https:\/\/lucumaagency.com\/en\/como-acelerar-una-tienda-woocommerce-lenta-caso-real\/\">c\u00f3mo aceleramos una tienda WooCommerce lenta<\/a>.<\/p>\n<p><strong>Caso 3: conectar un formulario con el CRM de una inmobiliaria.<\/strong> El formulario de la web de Proyecto Domus, de la inmobiliaria Basti\u00f3n, ten\u00eda que crear el lead directamente en el CRM donde trabajan los asesores, con el canal, el origen y la tipolog\u00eda de inter\u00e9s correctos. Ese conector es un plugin propio, y lo desarrollamos aparte en <a href=\"https:\/\/lucumaagency.com\/en\/integrar-tu-web-con-un-crm-inmobiliario-sperant-y-alternativas\/\">integrar tu web con un CRM inmobiliario<\/a>.<\/p>\n<h2>Cu\u00e1ndo compensa y cu\u00e1ndo no<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/lucumaagency.com\/wp-content\/uploads\/2026\/10\/cuando-plugin-a-medida.png\"\n     alt=\"Cuatro se\u00f1ales de que conviene un plugin a medida y cuatro de que no: l\u00f3gica propia del negocio frente a funciones est\u00e1ndar como copias, cach\u00e9 o formularios\"><\/p>\n<p><strong>Conviene cuando:<\/strong><\/p>\n<ul>\n<li><strong>La regla es de tu negocio<\/strong>, no del rubro. Si para explicarla hace falta una frase con \u00abexcepto cuando\u00bb, ning\u00fan plugin gen\u00e9rico la va a cubrir.<\/li>\n<li><strong>Ya probaste dos o tres y ninguno encaja.<\/strong> El tiempo de las pruebas ya lo gastaste; s\u00famalo al c\u00e1lculo.<\/li>\n<li><strong>Necesitas conectar con un sistema externo<\/strong>: un CRM, un ERP, una pasarela local, una API de facturaci\u00f3n. Casi nunca hay un plugin para tu combinaci\u00f3n exacta.<\/li>\n<li><strong>El plugin del mercado trae mucho m\u00e1s de lo que necesitas.<\/strong> Todo eso es c\u00f3digo ejecut\u00e1ndose y superficie de ataque, a cambio de una funci\u00f3n.<\/li>\n<\/ul>\n<p><strong>No conviene cuando<\/strong> lo que necesitas es una funci\u00f3n est\u00e1ndar y resuelta: copias de seguridad, cach\u00e9, formularios, SEO, seguridad. Ah\u00ed el plugin del mercado tiene a\u00f1os de casos extremos encima que tu versi\u00f3n no va a tener, y mantenerlo no te cuesta nada. Sobre cu\u00e1les usar y cu\u00e1les no, est\u00e1 nuestra lista en <a href=\"https:\/\/lucumaagency.com\/en\/plugins-de-wordpress-los-8-que-instalamos-siempre-y-los-5-que-nunca\/\">los 8 plugins que instalamos siempre<\/a>.<\/p>\n<h2>Las cinco reglas con las que los escribimos<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/lucumaagency.com\/wp-content\/uploads\/2026\/10\/reglas-plugin-a-medida.png\"\n     alt=\"Cinco reglas para escribir un plugin a medida: configuraci\u00f3n arriba del archivo, apagable sin romper el sitio, no cargar nada fuera de donde se usa, versionado en un repositorio y documentado\"><\/p>\n<p><strong>1. La configuraci\u00f3n, arriba y visible.<\/strong> Los nombres de categor\u00edas, campos y atributos van como constantes al principio del archivo, no repartidos por el c\u00f3digo. Cuando el cliente renombre una categor\u00eda, el arreglo es una l\u00ednea.<\/p>\n<p><strong>2. Que se pueda apagar.<\/strong> Cada funci\u00f3n grande con su interruptor propio. As\u00ed, si algo falla en producci\u00f3n, se apaga esa parte sin desactivar el plugin entero ni volver a programar.<\/p>\n<p><strong>3. No cargar nada donde no se usa.<\/strong> El archivo de 1.835 distritos solo se carga en el checkout y en la cuenta del cliente. Esta regla es la que separa un plugin a medida de uno del mont\u00f3n.<\/p>\n<p><strong>4. Versionado en un repositorio.<\/strong> No \u00absubido por FTP\u00bb. Con el c\u00f3digo en un repositorio, se ve qu\u00e9 cambi\u00f3 y cu\u00e1ndo, se vuelve atr\u00e1s en un minuto, y en varios de nuestros proyectos el servidor despliega solo al publicar un cambio.<\/p>\n<p><strong>5. Documentado en el mismo sitio.<\/strong> Qu\u00e9 hace, qu\u00e9 campos usa, qu\u00e9 pasa si se desactiva. Sin eso, al a\u00f1o siguiente nadie se atreve a tocarlo, que es la peor forma de quedarse atrapado.<\/p>\n<h2>El costo honesto<\/h2>\n<p>Un plugin a medida peque\u00f1o cuesta menos que un mes de la licencia anual de muchos plugins comerciales. Esa no es la parte cara. La parte cara es que <strong>alguien tiene que mantenerlo<\/strong>: cuando WordPress cambie, cuando PHP suba de versi\u00f3n, cuando el cliente renombre algo.<\/p>\n<p>Por eso solo lo recomendamos a clientes que tienen mantenimiento activo. Un plugin propio en manos de nadie es la misma bomba de tiempo que un plugin abandonado del repositorio, con el agravante de que en el repositorio al menos hay alguien m\u00e1s us\u00e1ndolo. Es parte de lo que cubre nuestro <a href=\"https:\/\/lucumaagency.com\/en\/mantenimiento-web\/\">mantenimiento web<\/a>, y uno de los puntos que recomendamos acordar por escrito en <a href=\"https:\/\/lucumaagency.com\/en\/que-pedir-en-la-cotizacion-de-una-web-para-que-no-te-vendan-humo\/\">qu\u00e9 pedir en la cotizaci\u00f3n de una web<\/a>: a nombre de qui\u00e9n queda el c\u00f3digo.<\/p>\n<h2>Preguntas frecuentes sobre plugins a medida<\/h2>\n<h3>\u00bfCu\u00e1nto cuesta un plugin a medida?<\/h3>\n<p>Depende enteramente del alcance. Uno que a\u00f1ade dos campos validados al checkout es un trabajo de d\u00edas; uno que sincroniza con un sistema externo, de semanas, porque la mitad del tiempo se va en entender la API del otro lado. Lo que nunca cambia es que hay que presupuestar tambi\u00e9n su mantenimiento.<\/p>\n<h3>\u00bfDe qui\u00e9n es el c\u00f3digo?<\/h3>\n<p>Eso se acuerda antes de empezar. En nuestros proyectos el cliente tiene el c\u00f3digo y los accesos al repositorio: es suyo, aunque un d\u00eda deje de trabajar con nosotros. Si una agencia no te quiere dar el c\u00f3digo de algo que pagaste, es una se\u00f1al.<\/p>\n<h3>\u00bfUn plugin propio hace la web m\u00e1s lenta?<\/h3>\n<p>Solo si est\u00e1 mal escrito, y entonces mucho. Nos pas\u00f3: nuestra primera versi\u00f3n del plugin de aromas cargaba cientos de variaciones en cada visita. Bien hecho es al rev\u00e9s: pesa menos que el gen\u00e9rico porque hace una sola cosa.<\/p>\n<h3>\u00bfPuedo modificar el tema en lugar de hacer un plugin?<\/h3>\n<p>Para estilos, s\u00ed. Para funciones, no: el d\u00eda que cambies de tema o lo actualices, pierdes todo. La funcionalidad va en un plugin precisamente para que sobreviva al dise\u00f1o.<\/p>\n<h3>\u00bfY si el desarrollador desaparece?<\/h3>\n<p>Es el riesgo real, y se cubre con tres cosas desde el d\u00eda uno: c\u00f3digo en un repositorio al que tengas acceso, documentaci\u00f3n en el mismo repositorio y una estructura sencilla que otro desarrollador pueda leer. Un plugin de 300 l\u00edneas bien ordenadas lo retoma cualquiera.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Un plugin a medida no es un lujo de proyectos grandes: suele ser lo m\u00e1s barato y lo m\u00e1s liviano cuando la regla que necesitas es propia de tu negocio. Lo que no es, nunca, es gratis despu\u00e9s de entregarlo. Si tienes qui\u00e9n lo mantenga, es la mejor decisi\u00f3n; si no lo tienes, es mejor adaptarse al plugin del mercado.<\/p>\n<p>En <a href=\"https:\/\/lucumaagency.com\/en\/\">Lucuma Agency, agencia de marketing digital en Lima<\/a>, desarrollamos este tipo de conectores y automatizaciones como parte de nuestros proyectos de <a href=\"https:\/\/lucumaagency.com\/en\/inteligencia-artificial\/\">inteligencia artificial y automatizaci\u00f3n<\/a>. Si est\u00e1s dando vueltas buscando el plugin que no existe, revisa todos nuestros <a href=\"https:\/\/lucumaagency.com\/en\/servicios\/\">servicios<\/a> o <a href=\"https:\/\/lucumaagency.com\/en\/agendar-meet\/\">agenda una consultor\u00eda gratis<\/a> y te decimos en 30 minutos si vale la pena programarlo.<\/p>","protected":false},"excerpt":{"rendered":"<p>Hay un momento, en bastantes proyectos, en que la b\u00fasqueda del plugin correcto se convierte en el problema. Probaste tres, ninguno hace exactamente lo que necesitas, dos est\u00e1n abandonados y el que m\u00e1s se acerca trae cuarenta opciones que no vas a usar. En ese punto conviene parar y hacer la pregunta inc\u00f3moda: \u00bfno sale [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1437,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[29],"tags":[],"class_list":["post-1438","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-wordpress"],"acf":[],"_links":{"self":[{"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/posts\/1438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/comments?post=1438"}],"version-history":[{"count":1,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/posts\/1438\/revisions"}],"predecessor-version":[{"id":1545,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/posts\/1438\/revisions\/1545"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/media\/1437"}],"wp:attachment":[{"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/media?parent=1438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/categories?post=1438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lucumaagency.com\/en\/wp-json\/wp\/v2\/tags?post=1438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}