🌐 Lea este artículo en otro idioma: English · Español · Deutsch · Français · العربية · Bahasa Melayu · 简体中文 · 日本語
La mayoría de las pequeñas agencias y de los profesionales independientes facturan de una de dos maneras. O con una hoja de cálculo y una plantilla de Word que alguien exporta a PDF a mano, o con un servicio de facturación en la nube que cobra por usuario y por mes, para siempre. La primera opción se viene abajo en cuanto dos personas la usan. La segunda funciona bien hasta que llega un nuevo miembro del equipo, una segunda moneda o un cliente que necesita algo para lo que el producto nunca se diseñó.
Nosotros teníamos los dos problemas, así que creamos nuestro propio plugin de facturación para WordPress: ArtinTech Invoice Manager. Funciona como una aplicación a pantalla completa dentro de un sitio WordPress. Genera facturas profesionales con exportación a PDF en un clic, mantiene una agenda de clientes con los importes pendientes, registra los pagos en varias monedas e incluye un panel de administración para gestionar a los usuarios. El plugin está en funcionamiento en este mismo sitio, y hoy lo usamos para facturar a nuestros propios clientes.
Este artículo es el registro completo de su desarrollo. Explica qué hace el plugin, cómo está construido y por qué, cómo funciona su seguridad, qué errores encontramos antes de que los vieran nuestros clientes y qué hizo falta para preparar el código para el directorio de plugins de WordPress.org. Si está decidiendo entre encargar una herramienta de facturación a medida o usar una ya existente, las últimas secciones están escritas para usted.

Por qué creamos nuestro propio plugin de facturación para WordPress
Desarrollar un software que se podría alquilar suele ser un error, así que conviene explicar por qué aquí no lo fue. Las razones decisivas fueron prácticas, no ideológicas.
- Los datos deben quedarse en la empresa. Las facturas, las direcciones de los clientes y el historial de pagos son el registro financiero de un negocio. Guardarlos en la misma base de datos de WordPress que ya respaldamos y controlamos es más sencillo que depender del botón de exportación de un tercero el día que lo necesitemos.
- El precio por usuario juega en su contra. Una herramienta en la nube barata para una persona se convierte en un coste real cuando un pequeño equipo y algunos colaboradores externos necesitan su propio acceso. Un plugin cuesta lo mismo lo use una persona o veinte.
- Varios titulares de cuenta independientes, una sola instalación. Cada persona debía tener sus propias facturas, clientes, logotipo, datos bancarios y numeración, totalmente separados de los demás, en un único sitio web.
- Facturamos a nivel internacional. Facturamos a clientes de otros países y en más de una moneda. Necesitábamos totales por moneda, sin conversiones silenciosas, y facturas que incluyeran los datos bancarios para transferencias internacionales.
- Queríamos poder modificarlo nosotros mismos. Cuando necesitamos un botón «Marcar como pagada» o un interruptor para ocultar el logotipo del cliente, lo queríamos esa misma tarde, no algún día en la hoja de ruta de un proveedor.
Nada de esto convierte al software de facturación en la nube en una mala opción. Es un equilibrio diferente, y una comparación directa ayuda a verlo.
| Servicio de facturación en la nube | Plugin de facturación para WordPress autoalojado | |
|---|---|---|
| Dónde están los datos | Servidores del proveedor | Su propia base de datos de WordPress |
| Coste al crecer el equipo | Suele aumentar por usuario | Fijo, sin importar el número de usuarios |
| Esfuerzo de puesta en marcha | Minutos | Instalar, activar y crear la página de la aplicación |
| Personalización | Lo que permitan los ajustes | Todo lo que permita el código |
| Mantenimiento | Lo gestiona el proveedor | Responsabilidad suya, como con cualquier plugin |
| Integraciones | A menudo un gran catálogo de conectores listos | Desarrolladas según su propio ecosistema |
Si la columna de la derecha le parece una lista de tareas pesadas, probablemente una herramienta en la nube le convenga más. Si le parece una lista de cosas que ya hace con su sitio web, un plugin empieza a resultar interesante.
Cómo funciona: de la instalación a la factura cobrada
Antes de entrar en detalles, este es el proceso completo de principio a fin: lo que un administrador hace una sola vez y lo que un titular de cuenta hace con cada factura. Nueve pasos, cada uno mostrado en la interfaz real.
Paso 1: instalar el plugin y crear la página de la aplicación
- Suba el plugin desde Plugins → Add New → Upload Plugin y actívelo.
- Abra el nuevo menú Invoice Manager en wp-admin.
- Haga clic en Create app page.
Así se publica una página en /invoice-manager/, y esa página es la aplicación. Nada más cambia en el sitio. Los administradores pueden empezar a usarla de inmediato.
Paso 2: iniciar sesión o permitir que otros se registren
La página de la aplicación muestra su propia pantalla de inicio de sesión a quien no esté conectado. Se entra con el usuario o el correo electrónico habituales de WordPress, con las opciones «Remember me» y «Forgot password».

Si activa el registro público, aparece un enlace Create one bajo el formulario de acceso que lleva al registro. Si la aprobación del administrador está activada, la nueva cuenta queda «pendiente» hasta que un administrador la apruebe.

Paso 3: configurar los datos de la empresa una sola vez
Cada titular de cuenta empieza en My settings:
- Subir el logotipo y elegir entre persona física o empresa.
- Añadir la dirección, los datos de contacto y el número de identificación fiscal.
- Definir la moneda predeterminada y el plazo de pago.
- Añadir los datos bancarios.
- Definir el prefijo y el número inicial de las facturas y crear sus propios tipos impositivos.
Todo lo que introduzca aquí se rellena automáticamente en las facturas nuevas, así que solo lo escribe una vez.

Paso 4: añadir clientes
En Clients → Add Client guarda cada cliente una sola vez: logotipo, nombre de la empresa y de la persona de contacto, correo electrónico, teléfono, dirección y número fiscal. La agenda de clientes se puede buscar, y cada ficha muestra cuántas facturas tiene el cliente y cuánto debe.

Paso 5: crear una factura
Haga clic en New invoice. El número, la fecha, la moneda, las condiciones y sus datos ya están rellenados.
- Elija el cliente.
- Añada las líneas con cantidad, precio y tipo impositivo.
- Si hace falta, aplique un descuento y añada campos personalizados, como un número de pedido.
- Decida si su logotipo y el del cliente aparecen en esta factura.
- Haga clic en Save.
Los totales se recalculan mientras escribe.

Paso 6: previsualizar y descargar el PDF
Preview muestra la factura exactamente como la recibirá el cliente. Download PDF guarda un archivo A4 que puede enviar por correo, subir a un portal de clientes o imprimir.
Hay tres plantillas, que se eligen para cada factura desde el menú de plantillas del editor:
- Blank: un diseño limpio y minimalista.
- Modern: con una cabecera de color.
- Classic: tipografía con serifa y líneas separadoras.

Paso 7: registrar el pago
Cuando llegue el dinero, haga clic en Mark paid en la fila de la factura, o en el icono $ para registrar un pago parcial con fecha, método y referencia. El estado cambia automáticamente:
- Partially paid (pagada parcialmente) tras un pago parcial.
- Paid (pagada) cuando el saldo llega a cero.
- Overdue (vencida) si pasa la fecha de vencimiento antes de que se pague por completo.

Paso 8: controlar lo que se le debe
Los totales del panel se actualizan al instante. Para un cliente concreto, abra su página en la agenda de clientes y verá:
- Todo lo facturado, cobrado y pendiente, por moneda.
- Todas las facturas que le ha emitido.
Es justo la pantalla que conviene abrir antes de una llamada de seguimiento.

Paso 9: gestionar usuarios
Los administradores y quienes tengan el rol Invoice Manager Admin abren Admin panel → Users. Desde ahí pueden:
- Aprobar registros pendientes. El usuario recibe un aviso automático por correo electrónico.
- Suspender o reactivar cuentas.
- Crear usuarios directamente. Los nuevos usuarios reciben un correo para establecer su contraseña.
- Cambiar roles y eliminar cuentas.

Qué hace el plugin: un recorrido por sus funciones
El proceso anterior muestra el camino principal. Este recorrido cubre todo lo demás. Todo funciona en una sola página del sitio, con una interfaz que se siente como una aplicación independiente y no como una pantalla de WordPress.
El panel de facturación
La pantalla principal responde a la pregunta con la que cualquier empresario abre una herramienta de facturación: ¿quién nos debe qué? Arriba hay cuatro indicadores: facturado, cobrado, pendiente y vencido. Cada uno se calcula por separado para cada moneda, con un selector cuando un titular de cuenta factura en varias. Debajo aparecen las cuatro facturas más recientes en forma de tarjetas y, a continuación, la lista completa.
La lista se puede buscar por número de factura o nombre del cliente, filtrar por cliente, estado, tipo de documento y periodo, y ordenar por cualquier columna. Desde cada fila puede registrar un pago, marcar la factura como pagada, descargar el PDF, duplicarla o eliminarla sin abrirla.
El editor de facturas
El editor tiene la misma estructura que el documento final, así que lo que escribe está donde aparecerá. Las acciones están en la columna derecha.
- Cuatro tipos de documento: Invoice (factura), Quote (presupuesto), Proforma y Credit Note (factura rectificativa).
- Numeración automática con un prefijo por usuario, como AT2623. El número se puede editar y se rechazan los duplicados.
- Fecha de emisión y de vencimiento. La fecha de vencimiento se calcula con el plazo de pago predeterminado de cada persona.
- Líneas con cantidad, precio unitario, descripción y un tipo impositivo de la lista propia del usuario.
- Descuento a nivel de factura, campos personalizados como un número de pedido, datos adicionales de la empresa y una descripción libre.
- Datos del cliente, elegidos de la agenda o escritos para un caso puntual, con la opción de guardar ese cliente nuevo al momento.
- Moneda por factura y condiciones de pago rellenadas desde los ajustes.
Los totales se actualizan mientras escribe. Si intenta salir con cambios sin guardar, la aplicación le pregunta antes. Es un detalle pequeño que en una herramienta de facturación importa más que casi en cualquier otro sitio.
Pagos, estados y «Marcar como pagada»
Nadie cambia a mano el estado de una factura. Se deduce de los pagos registrados, así que nunca puede contradecir el dinero que realmente ha entrado.
| Pagos registrados | Estado mostrado |
|---|---|
| Ninguno | Unpaid (sin pagar) |
| Menos que el total | Partially paid (pagada parcialmente) |
| Igual o más que el total | Paid (pagada) |
| No pagada del todo y vencida | Overdue (vencida) |
| El tipo de documento es Quote | Quote (nunca cuenta como ingreso) |
Cada pago tiene fecha, importe, método y una nota opcional, así que los pagos a plazos y las diferencias por comisiones bancarias se registran correctamente. Para el caso más habitual, cuando el cliente simplemente ha pagado, existe el botón Mark as paid. Registra en un clic un pago por el saldo restante con la fecha de hoy.
Exportación a PDF y plantillas
Cada factura puede verse en una de tres plantillas y descargarse como PDF A4: la plantilla Blank, limpia; la Modern, con cabecera de color; y la Classic, con tipografía con serifa y líneas separadoras.
El PDF incluye:
- El logotipo del emisor y el del cliente. Cualquiera de los dos puede ocultarse en cada factura.
- Las dos direcciones.
- Las líneas, el descuento, los impuestos y el total.
- Los pagos recibidos, el saldo pendiente, los datos bancarios y las condiciones.
La agenda de clientes
Los clientes se guardan una vez y se reutilizan. Cada uno tiene logotipo, nombre de la empresa y de la persona de contacto, dirección, número fiscal y notas.
La lista de clientes muestra cuánto debe cada uno, y la página de un cliente muestra:
- Los totales facturado, cobrado y pendiente por moneda.
- El historial completo de facturas.
- Un botón que empieza una factura nueva con los datos del cliente ya rellenados.
Ajustes personales para cada titular de cuenta
Cada usuario tiene sus propios:
- Logotipo y elección entre persona física o empresa.
- Dirección y teléfono con prefijo internacional.
- Número fiscal y sitio web.
- Moneda predeterminada y plazo de pago en días.
- Datos bancarios, prefijo de factura y siguiente número.
- Texto predeterminado de condiciones de pago y una lista de tipos impositivos con nombre.
Dos personas en el mismo sitio pueden emitir facturas que parecen de dos empresas distintas, porque lo son.
Registro, aprobaciones y panel de administración
La aplicación tiene sus propias pantallas de acceso y registro en el front-end, así que los titulares de cuenta nunca necesitan ver wp-admin. El registro público es opcional. Si está activado, las cuentas nuevas pueden requerir la aprobación de un administrador, que recibe un correo con cada registro.
Dentro de la aplicación, los administradores disponen de un Admin panel con cuatro secciones:
- Overview: número de cuentas y volumen facturado de todos los usuarios.
- Users: aprobar, suspender, reactivar, crear o eliminar cuentas y cambiar roles.
- Sign-up settings: ajustes del registro.
- Messages: mensajes del formulario «Contact us» de la aplicación.

Arquitectura: cómo debe guardar sus datos un plugin de facturación para WordPress
La calidad a largo plazo de un plugin depende en gran parte de su modelo de datos. Es lo único que ya no se puede cambiar fácilmente cuando existen facturas reales. Tomamos cuatro decisiones pronto, y las cuatro han resultado acertadas.
Tipos de contenido personalizados en lugar de tablas propias
Las facturas, los clientes y los mensajes de contacto son tipos de contenido personalizados (custom post types) privados. Cada registro pertenece al usuario de WordPress que lo creó, y los datos estructurados se guardan en un único campo de post meta. Los ajustes personales están en el user meta, y las opciones generales del plugin usan la Options API.
Unas tablas propias habrían sido algo más rápidas con volúmenes de datos muy grandes. A cambio, los tipos de contenido aportan muchas cosas gratis:
- Las copias de seguridad y migraciones habituales de WordPress incluyen los datos automáticamente.
- Las herramientas de exportación ya los entienden.
- La caché de objetos funciona sin código adicional.
- Al eliminar un usuario, sus registros pueden eliminarse con él sin escribir ni una línea de limpieza.
Una herramienta de facturación para una empresa rara vez supera unos pocos miles de facturas por persona. A esa escala, el enfoque nativo es el correcto.
Los tipos de contenido están registrados como completamente privados: no son públicos ni consultables, están excluidos de la búsqueda y ocultos a la REST API y a los sitemaps. Una factura no puede acabar por accidente en los resultados de búsqueda del tema ni en el sitemap de un plugin de SEO.
Instantáneas: por qué una factura copia al emisor y al cliente
Una factura es un documento con valor legal de un momento concreto. Si la empresa cambia de dirección el año que viene, las facturas del año anterior deben seguir mostrando la dirección antigua. Por eso, al crear una factura, el plugin copia en ella los datos del emisor, y también los del cliente.
Cambiar sus ajustes o la dirección de un cliente nunca reescribe el pasado. Si quiere que un borrador antiguo tome los datos nuevos, el editor ofrece una acción explícita, «Use my latest settings», en lugar de hacerlo en silencio.
La factura también conserva un vínculo con la ficha del cliente, en el que se basan los saldos por cliente. Si se elimina un cliente, se elimina el vínculo, pero la instantánea permanece. La factura se sigue leyendo correctamente y simplemente deja de contar para un cliente que ya no existe.
El estado se calcula, nunca se guarda
«Vencida» depende de la fecha de hoy, así que un estado guardado estaría mal al día siguiente. El plugin guarda los hechos: líneas, descuento, pagos y fecha de vencimiento. El estado lo calcula cada vez que se lee la factura. Un campo de estado guardado es una de las causas más frecuentes de «el panel dice que está pagada, el banco dice que no» en el software empresarial.
Cálculos que su contable aprobará
- El descuento se aplica antes de impuestos. Un descuento del 10 % reduce tanto el subtotal como el impuesto calculado sobre él, como exigen la mayoría de los sistemas fiscales.
- Impuestos por línea. Cada línea lleva su propio tipo, así que una factura puede combinar conceptos sujetos y exentos.
- Las facturas rectificativas restan en todos los totales, y los presupuestos no cuentan.
- Las monedas nunca se convierten. Los totales se llevan por moneda. Una conversión silenciosa a un tipo de cambio cualquiera daría cifras que no coinciden ni con la factura ni con el extracto bancario.
- Los totales se recalculan en el servidor a partir de las líneas al guardar. El cálculo en el navegador solo sirve para mostrarlo. Una petición manipulada no puede guardar un total que no cuadre.
Una REST API que comprueba la propiedad en cada petición
El front-end se comunica con WordPress a través de un espacio de nombres REST propio. Todas las rutas pasan por la misma comprobación de permisos: la petición debe venir de un usuario conectado con la capacidad del plugin y una cuenta activa, y llevar un nonce válido de WordPress.
Además, toda petición que afecte a una factura o a un cliente comprueba que el registro pertenece al usuario actual. Si no es así, la API responde not found en lugar de forbidden. Es intencionado: «forbidden» confirma que existe un registro con ese ID, mientras que «not found» no revela nada. Lo probamos expresamente solicitando la factura de una cuenta mientras estamos conectados con otra.
Cada campo que llega se sanea y se limita en longitud:
- Las fechas deben seguir un formato estricto.
- Las monedas deben tener tres letras.
- Los tipos de documento y las plantillas deben estar en una lista fija.
- Los logotipos solo se aceptan como imágenes que ya estén en la biblioteca de medios del sitio.
Las imágenes subidas se decodifican y se comprueba que sean archivos PNG, JPEG, GIF o WebP reales antes de entrar en la biblioteca de medios. Los SVG se rechazan, porque un archivo SVG puede contener scripts.
Un detalle práctico nos ahorró futuras consultas de soporte. Algunos alojamientos compartidos y reglas de cortafuegos bloquean por completo las peticiones HTTP PUT y DELETE. Por eso la aplicación envía cada escritura como POST con la cabecera estándar de sustitución de método de WordPress, que la REST API admite de forma nativa. Las rutas siguen siendo RESTful y las peticiones funcionan también en alojamientos restrictivos.
Cuentas, roles y aprobaciones
El plugin añade dos roles y un modelo de capacidades. Solo modifica los roles propios de WordPress para dar acceso a los administradores.
| Rol | Puede usar la aplicación | Puede gestionar titulares de cuenta | Puede gestionar administradores de facturación y roles |
|---|---|---|---|
| Administrator | Sí | Sí | Sí |
| Invoice Manager Admin | Sí | Sí | No |
| Invoice Account Holder | Sí | No | No |
El rol intermedio existe para que, por ejemplo, la persona responsable de la oficina pueda aprobar y atender a los usuarios sin recibir las llaves de todo el sitio. Los administradores nunca pueden ser suspendidos ni eliminados desde la aplicación, y nadie puede eliminar su propia cuenta allí. Son precisamente los errores que dejan a la gente fuera de su propio sitio web.
El registro público está desactivado hasta que un administrador lo activa. Entonces el formulario tiene cuatro protecciones:
- Un nonce.
- Un campo trampa (honeypot) oculto que rellenan los bots pero no las personas.
- Un límite de cinco registros por dirección de red y por hora.
- Una longitud mínima de contraseña.
Con la aprobación activada, una cuenta nueva puede iniciar sesión, pero solo ve el aviso «Esperando aprobación» hasta que un administrador la aprueba. En ese momento el usuario recibe un correo. Suspender a un usuario cierra su sesión al instante en todos sus dispositivos, porque se eliminan sus sesiones de WordPress en lugar de esperar a que caduque una cookie.
Una aplicación a pantalla completa que el tema no puede romper
Una aplicación de facturación tiene que verse y comportarse igual en cualquier sitio donde se instale. Los estilos de botones de un tema, los reinicios de CSS de un maquetador o el optimizador de scripts de un plugin de caché pueden romper sutilmente una interfaz de tipo aplicación. Por eso el plugin se encarga por completo de mostrar su propia página.
Cuando un visitante abre la página de la aplicación, el plugin sirve su propia plantilla mínima en lugar de la del tema. Esa plantilla solo imprime la hoja de estilos y los scripts del plugin, mediante las funciones estándar de WordPress, y nada del tema ni de otros plugins. La página también indica a las cachés que no la guarden y a los buscadores que no la indexen, porque es una aplicación, no contenido.
La interfaz está escrita en módulos de JavaScript sencillos, sin framework, empaquetados en un único archivo legible. La navegación usa rutas con hash, así que cambiar entre facturas, clientes y ajustes nunca recarga la página y el botón «Atrás» del navegador sigue funcionando. La tipografía DM Sans viene incluida en el plugin en lugar de cargarse desde un servicio de fuentes, por lo que la aplicación no hace ninguna petición a servidores de terceros.
El diseño se pensó para móviles desde el principio. En pantallas pequeñas:
- La barra lateral se convierte en un menú desplegable.
- Las tablas de datos se convierten en tarjetas apiladas, con una etiqueta en cada valor.
- El editor de facturas se reorganiza en una sola columna.
Las facturas se consultan a menudo desde el móvil cuando un cliente dice que ya ha pagado.


Generar facturas en PDF directamente en el navegador
Generar PDF en el servidor con PHP suele implicar librerías pesadas, fuentes instaladas en el servidor, límites de memoria y resultados muy distintos según el alojamiento. Nosotros generamos el PDF en el navegador del usuario:
- La factura se muestra como un documento HTML de tamaño A4.
- Ese documento se convierte en una imagen.
- La imagen se coloca en un archivo PDF con la librería de código abierto html2pdf.js.
Esto tiene tres ventajas:
- El PDF es idéntico a la vista previa en pantalla, porque es la vista previa.
- Funciona en cualquier alojamiento.
- No se envía ningún dato de facturas a ningún sitio para convertirlo.
El inconveniente es que el texto del PDF es una imagen y no texto seleccionable. Para facturas que se leen, se imprimen y se archivan, es un precio aceptable a cambio de un resultado idéntico en todas partes.
Los errores que encontramos antes que nuestros clientes
Cada uno de estos errores se vio en una pantalla real. Vale la pena describirlos, porque cada uno representa un tipo de fallo que aparece también en otros proyectos.
La segunda página en blanco por medio píxel
Las facturas de una página se descargaban como PDF de dos páginas, con la segunda en blanco. La causa: el documento en pantalla tenía una altura mínima de 1123 píxeles para que la vista previa pareciera una hoja completa. Pero un A4 a 96 DPI mide 1122,5 píxeles de alto. Ese medio píxel sobrante bastaba para que la librería de PDF empezara una página nueva.
La corrección elimina la altura mínima solo durante la exportación, así que la vista previa sigue pareciendo papel. Lo confirmamos contando las páginas del PDF generado: dos antes de la corrección y una después. Una factura de 45 líneas sigue pasando correctamente a una segunda página con contenido.
Un enlace de cierre de sesión que se escapaba a sí mismo
La función de WordPress para la URL de cierre de sesión devuelve una URL ya escapada para HTML, con los símbolos «&» escritos como &. Eso es correcto dentro de un atributo HTML, pero no en JavaScript: allí el carácter escapado rompía el token de seguridad y, con él, el cierre de sesión. La corrección decodifica la URL una vez antes de pasarla a la aplicación. Un error pequeño, pero típico de la frontera entre plantillas PHP y JavaScript.
Logotipos de clientes que nunca llegaban a la factura
El logotipo de un cliente se podía subir y se guardaba bien, pero nunca aparecía en las facturas. La instantánea que se copia en cada factura simplemente no lo incluía. La corrección tuvo dos partes:
- Las facturas nuevas ahora incluyen el logotipo en la instantánea.
- Las facturas guardadas antes recurren, al leerse, al logotipo actual del cliente vinculado, sin reescribir los datos guardados.
No tocar los datos guardados al corregir un problema de visualización es un hábito que merece la pena.
Una tarjeta del panel que contradecía a la tabla
Tras marcar una factura como pagada en la lista, la fila se volvía verde, pero la tarjeta «Facturas recientes» de encima seguía mostrando Unpaid hasta recargar la página. Dos vistas de los mismos datos se habían desincronizado. Ahora, cada acción que modifica una factura vuelve a dibujar toda la pantalla con datos actualizados, así que todas las cifras de la página coinciden siempre.
La alineación tras añadir un logotipo
Con el logotipo del cliente sobre la dirección, el bloque «To» empezaba más abajo que el bloque «From», y la factura parecía descompensada. La solución fue colocar el logotipo a la derecha de la dirección: los dos bloques empiezan en la misma línea y el logotipo queda alineado con el número de factura de arriba. Después dimos algo más de anchura a la columna del cliente para que una dirección postal suiza típica cupiera en una sola línea. La lección: pruebe los diseños de facturas con datos reales de clientes, porque los nombres de ejemplo siempre son convenientemente cortos.
Preparación para el directorio de plugins de WordPress.org
El código que funciona en su propio sitio y el código que supera la revisión de WordPress.org no son lo mismo. El directorio tiene sus propias reglas, y antes de enviarlo ajustamos varias cosas para cumplirlas.
- Ninguna llamada a servidores externos. La tipografía se cargaba al principio desde un servicio de fuentes, lo que enviaba la dirección IP de cada visitante a un tercero. Ahora está incluida en el plugin bajo su licencia abierta.
- Scripts y estilos a través de las funciones de WordPress. Las etiquetas script y link escritas a mano se sustituyeron por recursos registrados y versionados. La configuración en tiempo de ejecución se pasa con el mecanismo estándar de scripts en línea.
- Código fuente legible. El directorio no acepta código minificado sin sus fuentes. El paquete de la aplicación se distribuye sin minificar, con los módulos originales incluidos, y el readme explica cómo volver a compilarlo.
- Licencias de terceros declaradas. La librería de PDF y la tipografía aparecen en el readme con su licencia y un enlace a la fuente, y los archivos de licencia se incluyen en el plugin.
- El plugin no dispara hooks del núcleo. Una versión temprana lanzaba la acción de inicio de sesión propia de WordPress tras el registro. Hoy el plugin inicia la sesión con su propio código.
- Desinstalación solo con consentimiento. Eliminar el plugin no borra nada salvo que el administrador haya pedido expresamente borrar los datos. Las facturas son documentación empresarial, y perderlas por un clic accidental es inaceptable.
- Un readme completo con descripción breve, pasos de instalación, preguntas frecuentes, sección de privacidad y registro de cambios. El código está preparado para pasar sin problemas la herramienta oficial Plugin Check.
Ninguna de estas reglas empeoró el plugin, y algunas lo mejoraron. Incluir la tipografía, por ejemplo, eliminó por completo una cuestión de privacidad.
¿Plugin de facturación para WordPress a medida o una solución existente?
Con franqueza: la mayoría de las empresas no deberían encargar una herramienta de facturación a medida. Si una sola persona emite unas pocas facturas al mes en una sola moneda, un producto existente le sirve bien y cuesta menos que cualquier desarrollo a medida. El desarrollo a medida pasa a ser la mejor opción cuando se cumplen varios de estos puntos:
- Varias personas necesitan facturar por separado, aisladas entre sí, en un mismo sistema, y el precio por usuario empieza a notarse.
- La facturación debe conectarse con algo propio del negocio, como un sistema de reservas, una herramienta de gestión de proyectos, un ERP o un portal de clientes.
- Factura en varias monedas y necesita totales que nunca se conviertan a sus espaldas.
- Sus facturas necesitan reglas que las herramientas estándar no contemplan, como pasos de aprobación, tipos de documento o series de numeración propias.
- Quiere que los datos financieros permanezcan en una infraestructura que es suya y que usted mismo respalda y controla.
Si solo se cumple uno de estos puntos, estudie primero con más calma los productos existentes. Si se cumplen tres o más, un plugin específico como este suele costar menos, a dos o tres años, que las suscripciones y los apaños que sustituye. Y hace exactamente lo que necesita.
Decida lo que decida, evalúe cualquier herramienta de facturación según los puntos de este artículo:
- ¿Guarda un estado fijo de cada factura, de modo que los cambios posteriores en sus datos o en los de un cliente no reescriban facturas antiguas?
- ¿Calcula el estado a partir de los pagos en lugar de guardarlo?
- ¿Mantiene las monedas separadas?
- ¿Separa a los usuarios entre sí?
- ¿Puede acceder a sus datos en cualquier momento?
Preguntas frecuentes
¿Un plugin de facturación para WordPress puede gestionar varios usuarios?
Sí, si está diseñado para ello. En ArtinTech Invoice Manager, cada factura y cada cliente pertenecen al titular de cuenta que los creó, y la API comprueba la propiedad en cada petición. Cada usuario tiene sus propios ajustes, logotipo, numeración y datos bancarios, y no puede ver los datos de los demás.
¿El plugin envía datos de facturación a servicios de terceros?
No. Todo se guarda en la base de datos de WordPress del propio sitio. Los PDF se generan en el navegador del usuario y la tipografía viene incluida en el plugin. Los únicos mensajes salientes son los correos normales de WordPress, como los avisos de registro y aprobación.
¿Puede crear facturas en distintas monedas?
Sí. Cada factura tiene su propia moneda, y el panel y las páginas de clientes muestran los totales separados por moneda. No se convierte nada, así que las cifras siempre coinciden con las facturas que realmente se enviaron.
¿Funciona con mi tema o mi maquetador?
Sí. La página de la aplicación se muestra con la plantilla y los recursos propios del plugin. Ni el tema, ni Elementor, ni ningún otro maquetador pueden alterar su aspecto o su comportamiento. El resto de su sitio no se ve afectado en absoluto.
¿El plugin está disponible en WordPress.org?
Lo hemos preparado para el directorio de plugins de WordPress.org, y aparecerá allí en cuanto supere la revisión. Si quiere usarlo antes o necesita una versión adaptada a su forma de trabajar, póngase en contacto con nosotros.
¿Pueden crear una versión a medida para mi empresa?
Sí. Diseños de factura propios, tipos de documento adicionales, la conexión con un sistema de reservas o de proyectos, portales de clientes y flujos de aprobación son extensiones naturales de la misma base. Puede ver cómo planteamos este tipo de proyectos en nuestro servicio de desarrollo de plugins de WordPress.
Crear herramientas de WordPress como esta es una parte central de nuestro trabajo. Algunas son correcciones pequeñas, como el error 403 causado por la caché que rastreamos hasta la duración de un nonce. Otras son aplicaciones completas como esta, desarrolladas dentro de nuestro servicio de desarrollo WordPress y de desarrollo de CMS y ERP a medida. Si está valorando una herramienta de facturación, o cualquier otro software que su empresa tenga que sortear constantemente, hable con nosotros. Recibirá una valoración honesta, incluso si la respuesta es que un producto existente es suficiente.