Capítulo 1. Crear aplicaciones web con WordPress
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Este libro te ayudará a crear cualquier cosa con WordPress: sitios web, temas, plugins, servicios web y aplicaciones web. Hemos decidido centrarnos en las aplicaciones web porque puedes verlas como súper sitios web que hacen uso de todas las técnicas que cubriremos.
Hay mucha gente que cree que WordPress no es lo suficientemente potente o no está pensado para crear aplicaciones web; hablaremos de ello más adelante. Llevamos muchos años creando aplicaciones web con WordPress y sabemos que es absolutamente posible utilizarlo para crear aplicaciones escalables.
En este capítulo, empezamos definiendo qué son las aplicaciones web y, a continuación, explicamos por qué WordPress es un marco ideal para crearlas. También describimos algunas situaciones en las que utilizar WordPress no sería la mejor forma de construir tu aplicación web.
¿Qué es una App?
Nos gusta la definición de Wikipedia"El software de aplicación (abreviado app) es un software diseñado para realizar un grupo de funciones, tareas o actividades coordinadas en beneficio del usuario".
¿Qué es una aplicación web?
Una aplicación web no es más que una aplicación que se ejecuta a través de un navegador web.
Ten en cuenta que en algunas aplicaciones web, la tecnología del navegador está oculta; por ejemplo, cuando integras tu aplicación web en una aplicación nativa de Android o iOS, cuando ejecutas un sitio web como aplicación en Google Chrome o cuando ejecutas una aplicación utilizando Adobe AIR. Sin embargo, dentro de estas aplicaciones, sigue habiendo un sistema que analiza HTML, CSS y JavaScript.
También puedes pensar en una aplicación web como un sitio web, más cosas parecidas a una aplicación. No existe una línea divisoria exacta entre un sitio web y una aplicación web. Es uno de esos casos en los que lo sabes cuando lo ves.
Lo que podemos hacer es explicar algunas de las características de una aplicación web, darte algunos ejemplos y, a continuación, intentar elaborar una definición abreviada para que sepas en general de qué estamos hablando cuando utilicemos el término a lo largo del libro.
Nota
Verás referencias a SchoolPress mientras leas este libro. SchoolPress es una aplicación web que estamos construyendo para ayudar a escuelas y educadores a gestionar sus alumnos y planes de estudio. Todos los ejemplos de código están orientados a funcionalidades que pueden existir en SchoolPress. Hablaremos más sobre el concepto general de SchoolPress más adelante en este capítulo.
Características de una aplicación web
A continuación se enumeran algunas características típicamente asociadas a las aplicaciones web y a las aplicaciones en general. Cuantas más de estas características haya en un sitio web, más apropiado será elevar su etiqueta a app web.1
- Elementos interactivos
-
Una experiencia típica en un sitio web implica navegar a través de cargas de páginas, desplazarse y hacer clic en hipervínculos. Las aplicaciones web también pueden tener enlaces y desplazamiento, pero suelen utilizar otros métodos para navegar por la aplicación.
Los sitios web con formularios ofrecen experiencias transaccionales. Un ejemplo sería un formulario de contacto en un sitio web o un formulario de solicitud en la página de empleo del sitio web de empleo de una empresa. Los formularios permiten a los usuarios interactuar con un sitio utilizando algo más que un clic.
Las aplicaciones web tendrán elementos de interfaz de usuario (IU) aún más interactivos. Algunos ejemplos son las barras de herramientas, los elementos de arrastrar y soltar, los editores de texto enriquecido y los deslizadores.
- Tareas más que contenido
-
Recuerda que las aplicaciones web están "diseñadas para ayudar al usuario a realizar tareas específicas". Los usuarios de Google Maps obtienen indicaciones para llegar a. Los usuarios de Gmail escriben correos electrónicos. Los usuarios de Trello gestionan listas. Los usuarios de SchoolPress comentan los debates de clase.
Algunas aplicaciones siguen centrándose en el contenido. Una sesión típica con una app de Facebook o Twitter implica un 90% de lectura. Sin embargo, las propias aplicaciones presentan una forma de navegar por los contenidos diferente de la típica experiencia de navegación por la web.
- Inicio de sesión
-
Los inicios de sesión y las cuentas permiten a una aplicación web guardar información sobre sus usuarios. Esta información se utiliza para facilitar las tareas principales de la app y permitir una experiencia persistente. Cuando inician sesión, los usuarios de SchoolPress pueden ver los debates que no han leído. También tienen un nombre de usuario que identifica su actividad dentro de la app.
Las aplicaciones web también pueden tener niveles de usuarios. SchoolPress tendrá administradores que controlen el funcionamiento interno de la aplicación, profesores que organicen las clases y alumnos que participen en los debates de clase.
- Capacidades del dispositivo
-
Las aplicaciones web que se ejecutan en tu teléfono pueden acceder a tu cámara, a tu agenda, al almacenamiento interno y a la información de localización GPS. Las aplicaciones web que se ejecutan en el escritorio pueden acceder a la cámara web o al disco duro local. La misma aplicación web puede responder de forma diferente según el dispositivo que acceda a ella. Las aplicaciones web se ajustarán a diferentes tamaños de pantalla, resoluciones y capacidades.
- Trabajar sin conexión
-
Siempre que sea posible, es una buena idea hacer que tus aplicaciones web funcionen sin conexión. Por supuesto, la interactividad de Internet es lo que define la parte "web" de una aplicación web, pero un sitio que sigue funcionando cuando conduces por un túnel se parecerá más a una aplicación.
Con Gmail, puedes redactar correos electrónicos sin conexión. Evernote te permite redactar notas sin conexión y luego sincronizarlas con Internet cuando se restablezca la conectividad.
- Mashups
-
Las aplicaciones web pueden enlazar una o más aplicaciones web. Una aplicación web puede utilizar varios servicios web y API para enviar y recibir datos. Puedes tener una aplicación web que extraiga información basada en la ubicación, como la longitud y la latitud, de Twitter y Foursquare y la publique en un mapa de Google.
Aplicaciones móviles
Desde que se publicó la primera edición de este libro en 2012, las aplicaciones web -y las aplicaciones móviles en particular- han despegado. En la mayoría de los sitios web, los dispositivos móviles han superado a los ordenadores de sobremesa como mayor fuente de tráfico(Fuente: Perficient, Inc.).
En 2012, la aplicación web por excelencia se parecía a Basecamp, un software de gestión de proyectos al que se accede a través del navegador web de tu escritorio. En 2019, la aplicación web por excelencia se parece a Twitter, una aplicación de comunicación a la que se accede a través de tu teléfono iOS o Android.
Dado que, en la mayoría de los casos, la mayoría de tus usuarios accederán a tus sitios web y aplicaciones desde un dispositivo móvil, apoyamos una mentalidad "mobile first" al diseñar y desarrollar aplicaciones web. En el Capítulo 16 explicamos cómo hacer que tus aplicaciones de WordPress funcionen de forma nativa en el móvil. En el Capítulo 4 tratamos los fundamentos del diseño responsivo y de cómo hacer que tus sitios web se muestren correctamente en cualquier tamaño de pantalla.
Aplicaciones Web Progresivas
Lasaplicaciones web progresivas (PWA) son sitios web que aprovechan las características de los navegadores modernos para comportarse como aplicaciones nativas en Android, iOS o en el escritorio. En concreto, los sitios web que utilizan trabajadores de servicio para funcionar sin conexión tienen un archivo de manifiesto de aplicación web para definir la aplicación al sistema operativo (SO), y cumplen algunos otros requisitos para que puedan lanzarse como aplicaciones directamente desde el navegador.
Las PWA han sido defendidas por el equipo de Google Chrome, pero ahora son compatibles con iOS y la mayoría de los navegadores web modernos. Se está desarrollando un plugin de funciones para la compatibilidad con las PWA, con el fin de admitir las funciones principales de las PWA en el núcleo de WordPress. Puedes utilizar este plugin para convertir tu sitio de WordPress en una PWA, y es una buena idea, pero en realidad codificar una PWA es más una mentalidad que una simple conversión. De forma similar a las "características de una aplicación web" que acabamos de describir, el sitio principal de PWA en Google tiene una lista de comprobación de las características esperadas para la mayoría de las PWA, incluidas estas características básicas:
-
El sitio se sirve a través de HTTPS.
-
Las páginas son responsivas en tabletas y dispositivos móviles.
-
Todas las URL de las aplicaciones se cargan sin conexión.
-
Se proporcionan metadatos para Añadir a la pantalla de inicio.
-
La primera carga es rápida incluso en 3G.
-
El sitio funciona con varios navegadores.
-
Las transiciones de página no parecen bloquearse en la red.
-
Cada página tiene una URL.
Además de las características básicas, hay una lista de comprobación de elementos para las PWA "ejemplares" que abarca la experiencia del usuario (UX) y el rendimiento. La herramienta Lighthouse de Google proporciona pruebas e informes automatizados para cumplir los criterios de las PWA. Incluso las aplicaciones totalmente nativas o creadas para el navegador pueden beneficiarse de algunas de las sugerencias de las listas de comprobación de las PWA y de los informes de Lighthouse.
¿Por qué usar WordPress?
Ningún lenguaje de programación o herramienta de software será adecuado para todos los trabajos. Dentro de un rato veremos por qué no te conviene utilizar WordPress, pero por ahora, repasemos algunas situaciones en las que utilizar WordPress para crear tu aplicación web sería una buena elección.
Ya utilizas WordPress
Si ya utilizas WordPress para tu sitio principal, puede que estés a sólo un plugin de añadir la funcionalidad que necesitas. WordPress cuenta con excelentes plugins para comercio electrónico (WooCommerce), foros (bbPress), sitios de afiliación (Paid Memberships Pro), funcionalidad de redes sociales (BuddyPress) y gamificación (BadgeOS).
Integrar tu aplicación en tu sitio WordPress existente te ahorrará tiempo y facilitará las cosas a tus usuarios. Así, si tu aplicación es bastante sencilla, puedes crear un plugin personalizado en tu sitio de WordPress para programar la funcionalidad de tu aplicación web.
Si estás contento con WordPress para tu sitio actual, no te confundas si la gente te dice que necesitas actualizarte a otra cosa para añadir ciertas funcionalidades a tu sitio. Probablemente no sea cierto. No necesitas tirar todo el trabajo que ya has hecho en WordPress, y lo que sigue son grandes razones para seguir con WordPress.
La gestión de contenidos es fácil con WordPress
Desarrollado primero como plataforma de blogs, WordPress ha evolucionado a lo largo de los años, y con la introducción de los tipos de entrada personalizados (CPT) en la versión 3.0, hasta convertirse en un sistema de gestión de contenidos (CMS) totalmente funcional. Cualquier página o entrada puede ser editada por los administradores a través del panel de control, al que se puede acceder mediante el navegador web. Aprenderás a trabajar con CPTs en el Capítulo 5.
WordPress facilita la adición y edición de contenidos mediante un editor WYSIWYG (What You See Is What You Get), para que no tengas que recurrir a diseñadores web cada vez que quieras hacer un simple cambio en tu sitio. También puedes crear menús personalizados y elementos de navegación para tu sitio sin tocar ningún código.
Si tu aplicación web se centra en fragmentos de contenido (por ejemplo, nuestra aplicación SchoolPress se centra en tareas y debates), la API de tipos de entrada personalizados para WordPress (tratada en el Capítulo 5) facilita la rápida configuración y gestión de este contenido personalizado.
Incluso las aplicaciones más orientadas a las tareas suelen tener algunas páginas de información, documentación y ventas. Utilizar WordPress para tu aplicación te proporcionará un lugar para gestionar tu aplicación y todo su contenido.
La gestión de usuarios es fácil y segura con WordPress
WordPress tiene todo lo que necesitas para añadir tanto usuarios administrativos como usuarios finales a tu sitio.
Además de controlar el acceso al contenido, el sistema de Roles y Capacidades de WordPress es extensible y te permite controlar qué acciones están disponibles para determinados grupos de usuarios. Por ejemplo, por defecto, los usuarios con el rol de colaborador pueden añadir nuevas entradas, pero no pueden publicarlas. Del mismo modo, puedes crear nuevos roles y capacidades para gestionar quién tiene acceso a tus funciones personalizadas.
Puedes utilizar plugins como Paid Memberships Pro para ampliar la gestión de usuarios incorporada y permitirte designar miembros de distintos niveles y controlar a qué contenido tienen acceso los usuarios. Por ejemplo, puedes crear un nivel para dar a los miembros de pago acceso a contenido premium en tu sitio de WordPress.
Plugins
Hay más de 55.000 plugins gratuitos en el repositorio de WordPress. Hay muchos más plugins, tanto gratuitos como premium, en varios sitios de Internet. Cuando tengas una idea para una extensión de tu sitio web, es muy probable que exista un plugin para ello, lo que te ahorrará tiempo y dinero.
Hay un puñado de plugins indispensables que acabamos utilizando en casi todos los sitios y aplicaciones web que creamos.
Para la mayoría de los sitios web que crees, querrás almacenar en caché la salida para una navegación más rápida, utilizar herramientas como Google Analytics para el seguimiento de los visitantes, crear mapas de sitio y ajustar la configuración de la página para la optimización de los motores de búsqueda (SEO), junto con otras tareas comunes.
Hay muchos plugins bien soportados para todas estas funciones. A lo largo de este libro sugerimos nuestros favoritos; puedes encontrar una lista de en el sitio web de este libro.
La flexibilidad es importante
WordPress es un completo framework capaz de muchas cosas. Además, WordPress se basa en tecnología PHP, JavaScript y MySQL, , de modo que cualquier cosa que puedas construir en PHP/MySQL (que es prácticamente cualquier cosa) se puede atornillar a tu aplicación WordPress con bastante facilidad.
WordPress y PHP/MySQL en general no son perfectos para todas las tareas, pero son muy adecuados para una amplia gama de tareas. Tener una plataforma que crezca con tu negocio puede permitirte ejecutar y pivotar más rápidamente. Por ejemplo, he aquí una progresión típica para el sitio web de una startup Lean que funciona con WordPress:
-
Anuncia tu startup con un sitio web de una página.
-
Añade un formulario para recopilar direcciones de correo electrónico.
-
Añade un blog.
-
Céntrate en el SEO y optimiza todo el contenido.
-
Empuja las entradas del blog a Twitter y Facebook.
-
Añadir foros.
-
Utiliza el plugin Paid Memberships Pro para permitir que los miembros paguen por el acceso.
-
Añade formularios, herramientas y comportamientos de aplicación personalizados para los miembros de pago.
-
Actualiza la interfaz de usuario utilizando técnicas y frameworks de JavaScript.
-
Ajusta el sitio y el servidor a escala.
-
Localiza el sitio/aplicación para diferentes países e idiomas.
-
Añade soporte para Aplicaciones Web Progresivas.
-
Lanza envoltorios iOS y Android para la aplicación.
Lo bueno de recorrer este camino es que, en cada paso, tienes la misma base de datos de usuarios y utilizas la misma plataforma de desarrollo.
Actualizaciones frecuentes de seguridad
El hecho de que WordPress se utilice en millones de sitios web lo convierte en un objetivo para los piratas informáticos que intentan burlar su seguridad. Algunos de esos hackers han tenido éxito en el pasado; sin embargo, los desarrolladores de WordPress se apresuran a abordar las vulnerabilidades y a publicar actualizaciones para solucionarlas. Es como tener a millones de personas probando y arreglando constantemente tu software, porque eso es exactamente lo que ocurre.
La arquitectura subyacente de WordPress hace que aplicar estas actualizaciones sea un proceso rápido e indoloro que pueden realizar incluso los usuarios web novatos. Si eres inteligente a la hora de configurar WordPress y actualizas a las últimas versiones cuando estén disponibles, WordPress es una plataforma mucho más segura para tu sitio que cualquier otra disponible. Hablaremos de la seguridad con más detalle en el Capítulo 8.
Coste
WordPress es gratis. PHP es gratis. MySQL es gratis. La mayoría de los plugins son gratuitos.
Los servidores y el alojamiento cuestan dinero, pero dependiendo de lo grande que sea tu aplicación web y del tráfico que recibas, puede ser relativamente barato. Si necesitas una funcionalidad personalizada que no se encuentra en ningún plugin existente, puede que tengas que pagar a un desarrollador para que la construya. O si eres desarrollador tú mismo, te costará algo de tiempo.
Respuestas a algunas críticas comunes a WordPress
Algunos críticos acérrimos de WordPress podrían decir que no es un buen framework para crear aplicaciones web, o que no es un framework en absoluto. Con el debido respeto a quienes tienen estas opiniones, nos gustaría explicar por qué no estamos de acuerdo. Estas son algunas de las críticas más comunes.
WordPress es sólo para blogs
Mucha gente cree que, como WordPress se creó para gestionar un blog, sólo sirve para gestionar blogs.
Afirmaciones como ésta eran ciertas hace unos años, pero desde entonces WordPress ha implementado una sólida funcionalidad CMS, que lo hace útil para otros sitios centrados en el contenido. WordPress es ahora el CMS más popular en uso, con más del 60% de cuota de mercado.2 La Figura 1-1 muestra una diapositiva de la presentación "State of WordPress" de de Matt Mullenweg en WordCamp San Francisco 2013. La pirámide invertida de la izquierda representa un WordPress de alrededor de 2006, con la mayor parte del código dedicado a la aplicación del blog y un poco de código del CMS y de la plataforma que lo sostiene. La pirámide de la derecha representa el estado actual de la plataforma WordPress, en la que la mayor parte del código está en la propia plataforma, con una capa CMS encima y la aplicación de blog ejecutándose sobre la capa CMS. WordPress es una plataforma mucho más estable que hace unos años.
Puedes utilizar la API de tipos de entrada personalizados para ajustar tu instalación de WordPress de modo que admita otros tipos de contenido además de entradas de blog o páginas. Esto lo veremos en detalle en el Capítulo 5.
WordPress es sólo para sitios de contenido
Al igual que la gente de "sólo para blogs", algunos dirán que WordPress es sólo para sitios de contenido.
En primer lugar, aunque WordPress sólo fuera aplicable a sitios y aplicaciones basados en contenidos, eso supondría un gran número de aplicaciones. La pantalla de inicio de tu teléfono probablemente incluye un gran número de aplicaciones basadas en contenidos como Netflix, Twitter, Facebook, Reddit y Evernote. Se trata de aplicaciones muy populares mantenidas por empresas gigantes. Ahora bien, no estamos sugiriendo que estas aplicaciones se ejecuten en WordPress, pero sí que podrías crear una aplicación similar a éstas utilizando WordPress como marco de aplicación.
En segundo lugar, como veremos en detalle en este libro, WordPress también es un gran framework para crear aplicaciones web más interactivas. La principal característica que permite utilizar WordPress como framework es la API de plugins, que te permite engancharte al funcionamiento predeterminado de WordPress y cambiar cosas. No sólo puedes utilizar los miles de plugins disponibles en el repositorio de WordPress y en otros lugares de Internet, sino que también puedes utilizar la API de plugins para escribir tus propios plugins personalizados y hacer que WordPress haga cualquier cosa posible en PHP/MySQL.
WordPress no escala
Algunos señalarán una instalación predeterminada de WordPress que se ejecuta en un alojamiento de gama baja y observarán cómo el sitio se ralentiza o se bloquea con una carga pesada, y concluirán que WordPress no es escalable.
O tal vez cuando te sugerimos que podías crear un sitio como Facebook utilizando WordPress, te burlaste de la idea con razón.
Nota
Si pretendes construir una aplicación a escala de Facebook, éste no es el libro para ti. Pregúntale a tu director de tecnología qué parte de su presupuesto multimillonario se destina a tu aplicación y qué ingenieros tienes que contratar de Google y Amazon para construir tu solución personalizada.
En realidad, muchos sitios de gran tráfico funcionan con WordPress. WordPress.com funciona con el mismo software básico que cualquier sitio WordPress y es uno de los sitios web con más tráfico del mundo.
A medida que aumente el uso de tu aplicación, tendrás que actualizar e intercambiar componentes individuales para satisfacer esa escala. Los problemas para escalar WordPress son los mismos que para escalar cualquier aplicación: almacenar en caché páginas y datos, gestionar más rápidamente las llamadas a la base de datos y mejorar el rendimiento de la red. Grandes sitios como WordPress.com, TechCrunch y los blogs del New York Times han escalado con WordPress. Del mismo modo, la mayoría de las lecciones aprendidas escalando aplicaciones PHP/MySQL en general se aplican también a WordPress. En el Capítulo 14 tratamos en detalle el escalado de aplicaciones WordPress.
WordPress es inseguro
Como cualquier producto de código abierto, al utilizar WordPress habrá que hacer concesiones en materia de seguridad.
Por un lado, como WordPress es tan popular, será el objetivo de los piratas informáticos en busca de exploits de seguridad. Y como el código es abierto, será más fácil descubrir estos fallos.
Por otro lado, como WordPress es de código abierto, te enterarás cuando estos exploits se hagan públicos, y probablemente alguien solucionará el exploit por ti.
Nos sentimos más seguros sabiendo que hay mucha gente ahí fuera intentando explotar WordPress y otras tantas personas trabajando para hacer que WordPress sea seguro frente a esos exploits. No creemos en la "seguridad a través de la oscuridad", excepto como medida adicional. Preferimos que los agujeros de seguridad de nuestro software salgan a la luz en lugar de pasar desapercibidos hasta el peor momento posible.
El capítulo 8 trata las cuestiones de seguridad con más detalle, incluyendo una lista de buenas prácticas para reforzar tu instalación de WordPress y cómo codificar de forma segura.
Los plugins de WordPress son una mierda
La API de plugins de WordPress y los miles de plugins que se han desarrollado utilizándola son la salsa secreta y, en nuestra opinión, la razón número uno por la que WordPress se ha hecho tan popular y tiene tanto éxito como plataforma web.
Algunas personas dirán: "Claro, hay miles de plugins, pero son todos una mierda". Vale, algunos de los plugins que hay son una mierda.
Pero hay muchos plugins que definitivamente no son una mierda, entre ellos AppPresser, desarrollado por el coautor Brian Messenlehner. Si te gusta utilizar WordPress para gestionar tu contenido escrito o tu tienda de comercio electrónico, el plugin y la plataforma AppPresser son la forma más rápida de convertir ese contenido o esa tienda en una aplicación móvil.
Paid Memberships Pro, desarrollado por el coautor Jason Coleman, tampoco es una mierda. Utilizar Paid Memberships Pro para gestionar la facturación y administración de tus miembros te permitirá centrar tus esfuerzos de desarrollo en la competencia principal de tu aplicación, en lugar de en cómo integrar tu sitio con una pasarela de pago.
Muchos plugins hacen algo muy sencillo (por ejemplo, ocultar la barra de administración a los no administradores), funcionan exactamente como se anuncian y no tienen margen para ser una mierda.
Los temas y plugins que se encuentran en el repositorio de WordPress.org son revisados exhaustivamente por voluntarios para garantizar la seguridad y la calidad del código. El proceso de revisión de temas de WordPress. org es notoriamente más estricto y exhaustivo que los procesos de otros mercados. El proyecto Tide está trabajando para añadir pruebas automatizadas a los repositorios de plugins y temas que darán lugar a plugins y actualizaciones de mayor calidad, al tiempo que detectarán más rápidamente los problemas de compatibilidad y seguridad.
Incluso los plugins cutres pueden arreglarse, reescribirse o tomarse prestados para que funcionen mejor. Puede que a veces te resulte más fácil reescribir un plugin malo en lugar de arreglarlo. Sin embargo, sigues estando más adelantado de lo que estarías si tuvieras que escribirlo todo tú desde cero.
Nadie te obliga a utilizar plugins de WordPress sin examinarlos tú mismo. Si estás construyendo una aplicación web seria, tú mismo comprobarás el código del plugin, lo arreglarás para que cumpla tus normas y seguirás adelante con el desarrollo.
Cuándo no usar WordPress
WordPress no es la solución para todas las aplicaciones. En esta sección se describen algunos casos en los que no te conviene utilizar WordPress para crear tu aplicación.
Piensas licenciar o vender la tecnología de tu sitio web
WordPress utiliza la Licencia Pública General de GNU, versión 2 (GPLv2), que tiene restricciones sobre cómo distribuyes el software que construyes con ella. Es decir, no puedes restringir lo que la gente hace con tu software una vez que lo vendes o distribuyes.
Se trata de un tema complicado, pero la idea básica es que si sólo vendes o das acceso a tu aplicación, no tendrás que preocuparte por la GPLv2. Sin embargo, si vendes o distribuyes el código fuente subyacente de tu aplicación, la GPLv2 se aplicará al código que distribuyas.
Por ejemplo, si alojamos SchoolPress en nuestros propios servidores y vendemos cuentas para acceder a la aplicación, eso no cuenta como distribución, y la GPLv2 no afecta en absoluto a nuestro negocio.
Sin embargo, si quisiéramos permitir que los centros escolares instalaran el software para ejecutarlo en sus propios servidores, tendríamos que compartir el código fuente con ellos. Esto contaría como un acto de distribución. Nuestros clientes podrían regalar legalmente nuestro código fuente aunque inicialmente les hubiéramos cobrado por el software. Debemos utilizar la licencia GPLv2, que no nos permite restringir lo que los usuarios hacen con el código después de descargarlo.
Otra plataforma te llevará "allí" más rápido
Si tienes un equipo de desarrolladores Ruby experimentados, deberías utilizar Ruby para crear tu aplicación web. Si hay una plataforma, marco o paquete que incluye el 80% de las funciones que necesitas para tu aplicación web y WordPress no tiene nada similar, probablemente deberías utilizar esa otra plataforma.
La flexibilidad no es importante para ti
Una de las mejores características de un sitio WordPress es la posibilidad de cambiar rápidamente partes de tu sitio web para adaptarlas mejor a tus necesidades. Por ejemplo, si los "me gusta" de Facebook dejan de generar tráfico, puedes desinstalar tu plugin de Facebook Connect e instalar uno para Pinterest.
Por lo general, actualizar tu tema o intercambiar plugins en un sitio WordPress será más rápido que desarrollar funciones desde cero en otra plataforma. Sin embargo, para los casos en los que la optimización y el rendimiento son más importantes que poder actualizar rápidamente la aplicación, programar una aplicación nativa o programar en PHP directo va a ser la mejor opción.
Si tu aplicación va a hacer una cosa sencilla, querrás construirla a un nivel inferior. Por ejemplo, el servidor de licencias de Paid Memberships Pro es básicamente un único archivo JSON de información sobre el complemento y un pequeño script para comprobar las claves de licencia y entregar archivos comprimidos. Jason construyó ese servidor de licencias en PHP puro, con grandes cantidades de caché. El servidor de licencias se ejecuta en un Sroplet de DigitalOcean de 10 $/mes y sirve a más de 80.000 sitios que ejecutan Paid Memberships Pro.
Del mismo modo, si tienes los recursos de Facebook, puedes permitirte construirlo todo a mano y utilizar compiladores personalizados de PHP a C y componentes nativos de iOS para reducir en unos milisegundos los tiempos de carga de tu sitio web y tu aplicación.
Tu aplicación debe ser altamente en tiempo real
Un posible inconveniente de WordPress, en el que entraremos más adelante, es su dependencia de la arquitectura típica de un servidor web. En la configuración típica de WordPress, un usuario visita una URL, que se comunica con un servidor web (como Apache) a través de HTTP, pone en marcha un script PHP para generar la página y, a continuación, devuelve la página completa al usuario.
Hay formas de mejorar el rendimiento de esta arquitectura utilizando técnicas de almacenamiento en caché y/o configuraciones optimizadas del servidor. Puedes hacer que WordPress sea asíncrono utilizando llamadas Ajax o accediendo a la base de datos con clientes alternativos. Sin embargo, si tu aplicación necesita ser en tiempo real y totalmente asíncrona (por ejemplo, una aplicación similar a una sala de chat o un juego multijugador), tienes nuestra bendición para que te lo pienses dos veces antes de utilizar WordPress.
Muchos desarrolladores de WordPress, incluido Matt Mullenweg, fundador y líder espiritual de WordPress, comprenden esta limitación. Cada vez más funcionalidades de WordPress se están trasladando a JavaScript, donde la computación se puede trasladar al navegador y se pueden utilizar marcos como REACT para crear experiencias altamente interactivas. El nuevo editor Gutenberg añadido en WordPress 5.0 es el mejor ejemplo de este movimiento y es indicativo de lo que está por venir, pero por ahora te enfrentarás a una ardua batalla tratando de conseguir que WordPress funcione de forma asíncrona con el mismo rendimiento que una aplicación nativa, o algo construido enteramente en Node.js u otras tecnologías específicamente adecuadas para aplicaciones en tiempo real.
WordPress como marco de aplicación
Los sistemas de gestión de contenidos como WordPress, Drupal y Joomla suelen quedar fuera del debate sobre los marcos de trabajo, pero en realidad, WordPress (en particular) es estupendo para lo que se supone que son los marcos de trabajo: crear aplicaciones rápidamente.
En cuestión de minutos, puedes configurar WordPress y tener una aplicación totalmente funcional con registro de usuarios, gestión de sesiones, gestión de contenidos y un panel de control para monitorizar la actividad del sitio.
Las distintas API, objetos comunes y funciones de ayuda que se tratan en este libro te permiten codificar aplicaciones complejas más rápidamente sin tener que preocuparte por la integración de sistemas de bajo nivel.
La Figura 1-2 muestra el triángulo de la derecha de la presentación "Estado de WordPress" de Mullenweg de 2013, que representa una plataforma WordPress estable con una capa CMS construida sobre ella y una aplicación de blogging construida sobre la capa CMS.
La realidad es que la mayor parte del código base actual de WordPress es compatible con la plataforma de aplicaciones subyacente. Piensa en cada versión de WordPress como un marco de aplicación que incluye una aplicación de blogging de muestra.
WordPress frente a los Frameworks Modelo-Vista-Controlador
Modelo-vista-controlador (MVC) es un patrón de diseño común utilizado en muchos marcos de desarrollo de software. Las principales ventajas de utilizar una arquitectura MVC son la reutilización del código y la separación de preocupaciones (SoC). WordPress no utiliza una arquitectura MVC, pero a su manera fomenta la reutilización del código y la SoC.
Aquí explicaremos brevemente la arquitectura MVC y cómo se relaciona con el proceso de desarrollo de WordPress. Si estás familiarizado con los frameworks basados en MVC, esta sección debería ayudarte a entender cómo enfocar el desarrollo de WordPress de forma similar.
La Figura 1-3 describe una aplicación típica basada en MVC. El usuario final utiliza un controlador, que manipula el estado y los datos de la aplicación a través de un modelo, que luego actualiza una vista que se muestra al usuario. Por ejemplo, en una aplicación de blog, un usuario podría estar mirando la página de entradas recientes (una vista). El usuario haría clic en el título de una entrada, lo que le llevaría a una nueva URL (un controlador) que cargaría los datos de la entrada (en un modelo) y mostraría la entrada individual (una vista diferente).
La arquitectura MVC favorece la reutilización del código al permitir que los modelos, las vistas y los controladores interactúen. Por ejemplo, tanto la vista de entradas recientes como la de entradas individuales pueden utilizar el mismo modelo de entrada al mostrar los datos de la entrada. Los mismos modelos pueden utilizarse en el frontend para mostrar las entradas y en el backend para editarlas. La arquitectura MVC es compatible con el SoC, ya que permite a los diseñadores centrar su atención en las vistas, mientras que los programadores lo hacen en los modelos.
Podrías intentar utilizar una arquitectura MVC dentro de WordPress. Existen varios proyectos que te ayudarán a hacerlo; sin embargo, creemos que intentar atar MVC a WordPress podría dar lugar a problemas, a menos que el núcleo de WordPress admita oficialmente MVC. En su lugar, te sugerimos que sigas la "Manera WordPress", tal y como se describe en este libro.
Aún así, si te interesa, el plugin WP MVC está en desarrollo activo y te ayuda a utilizar un marco MVC para crear plugins de WordPress. Si no quieres o no necesitas un MVC completo, hay un par de formas de asignar un proceso MVC a WordPress.
Modelos = plugins
En un marco MVC, el código que almacena las estructuras de datos subyacentes y la lógica empresarial se encuentra en los modelos. Aquí es donde los programadores pasarán la mayor parte de su tiempo.
En WordPress, los plugins son el lugar adecuado para almacenar nuevas estructuras de datos, lógica empresarial compleja y definiciones de tipos de entrada personalizados.
Esta comparación se rompe de un par de maneras. En primer lugar, muchos plugins añaden funcionalidades similares a las vistas y contienen elementos de diseño: por ejemplo, cualquier plugin que añada un widget para utilizarlo en tus páginas. En segundo lugar, los formularios y otros componentes de diseño utilizados en el panel de control de WordPress también suelen manejarse en plugins.
Una forma de hacer que el SoC sea más claro al añadir componentes similares a las vistas a tus plugins de WordPress es crear una carpeta de plantillas o páginas y colocar en ella tu código frontend. La práctica habitual es permitir que las plantillas anulen la plantilla utilizada por el plugin. Por ejemplo, si utilizas WordPress con el plugin Paid Memberships Pro, puedes colocar una carpeta llamada paid-memberships-pro/pages en tu tema activo para anular las plantillas de página predeterminadas. (Esta técnica para anular las plantillas de los plugins se explica en el Capítulo 4).
Vistas = temas
En un marco MVC, el código para mostrar los datos al usuario se escribe en las vistas. Aquí es donde los diseñadores y desarrolladores frontales pasarán la mayor parte de su tiempo.
En WordPress, los temas son el lugar adecuado para almacenar el código y la lógica de las plantillas.
Una vez más, la comparación aquí no es uno a uno, pero "vistas = temas" es un buen punto de partida.
Controladores = cargador de plantillas
En un marco MVC, el código para procesar la entrada del usuario (en forma de URL o $_GET
o $_POST
datos), y decidir qué modelos y vistas utilizar para gestionar una solicitud, se almacena en los controladores. El código de los controladores suele ser manejado por un programador y, a menudo, se configura una vez y luego se olvida. El meollo de la programación en una aplicación MVC ocurre en los modelos y las vistas. Aun así, los controladores son una parte importante del funcionamiento de una aplicación.
En WordPress, todas las peticiones de páginas (a menos que accedan a un archivo .html almacenado en caché) se procesan a través del archivo index.php y son procesadas por WordPress según la jerarquía de plantillas. El cargador de plantillas averigua qué archivo de la plantilla debe utilizarse para mostrar la página al usuario final. Por ejemplo, utiliza search.php para mostrar los resultados de una búsqueda, single.php para mostrar una única entrada, etc.
El comportamiento predeterminado puede personalizarse aún más mediante la API WP_Rewrite (tratada en el Capítulo 7) y otros ganchos y filtros. Puedes encontrar información sobre la jerarquía de plantillas en el Manual de temas de WordPress; tratamos la jerarquía de plantillas con más profundidad en el Capítulo 4.
Para entender mejor cómo funcionan los frameworks MVC, el framework PHP Yii tiene un gran recurso que explica en detalle cómo utilizar mejor su arquitectura MVC.3
Para saber más sobre cómo desarrollar aplicaciones web utilizando WordPress como framework, sigue leyendo este libro.
Anatomía de una aplicación WordPress
En esta sección describimos la aplicación que hemos creado como complemento de este libro: SchoolPress. Cubriremos la funcionalidad prevista de SchoolPress, cómo funciona y quién la utilizará, y -lo más importante para este libro- cómo se construye cada pieza de la aplicación en WordPress.
No te alarmes si no entiendes parte de la terminología siguiente. En capítulos posteriores, repasaremos todo lo introducido aquí con más detalle. Siempre que sea posible, señalamos el capítulo que corresponde a la función tratada.
Nota
Este libro no pretende ser un libro de "cómo recrear la aplicación SchoolPress" ni una guía paso a paso. Cuando tiene sentido, utilizamos SchoolPress en nuestros ejemplos de código a lo largo del libro para que no tengas que dedicar tiempo a entender el contexto de cada ejemplo individual.
¿Qué es SchoolPress?
SchoolPress es una aplicación web que facilita a los profesores la interacción con sus alumnos fuera del aula. Los profesores pueden crear clases e invitar a sus alumnos a ellas. Cada clase tiene un foro para debates ad hoc y también un sistema más estructurado para que los profesores publiquen tareas y los alumnos entreguen su trabajo.
Puedes encontrar la aplicación en funcionamiento en el sitio web de SchoolPress. El código fuente de la aplicación se encuentra en el repositorio GitHub de SchoolPress.
SchoolPress funciona en una red multisitio de WordPress
SchoolPress ejecuta una versión multisitio de WordPress. El sitio principal alberga cuentas gratuitas donde los profesores pueden registrarse y empezar a gestionar sus clases. También tiene toda la información de marketing para los sitios escolares independientes de la red, incluida la página para registrarse y pasar por caja para un nivel de afiliación de pago.
Las escuelas pueden crear un subdominio único que albergará las clases de sus profesores. Esta configuración ofrece un control e informes más precisos para todas las clases de toda la escuela. En el Capítulo 12 encontrarás información detallada sobre el uso de una red multisitio con WordPress.
El modelo de negocio de SchoolPress
SchoolPress utiliza los plugins Paid Memberships Pro, PMPro Register Helper y PMPro Network para personalizar el proceso de inscripción y aceptar pagos con tarjeta de crédito para las escuelas que se inscriban.
Las escuelas pueden adquirir un subdominio único para su escuela por una cuota anual. Ningún otro usuario de SchoolPress paga por el acceso. Cuando los administradores de las escuelas se registran, pueden especificar el nombre de la escuela y el slug para su subdominio <tuescuela>.schoolpress.me. Se crea un nuevo sitio de red para ellos y se les da acceso a una versión simplificada del panel de control de WordPress para su sitio.
A continuación, el administrador del centro invita a los profesores al sistema. Los profesores también pueden solicitar una invitación a una escuela, que debe ser aprobada por el administrador de la escuela. Los profesores pueden invitar a los alumnos a las clases que creen. Los alumnos también pueden solicitar una invitación a una clase que debe ser aprobada por el profesor.
Los profesores también pueden registrarse gratuitamente para alojar sus clases en schoolpress.me. Las páginas alojadas en este subdominio pueden ejecutar anuncios u otros esquemas de monetización. Los detalles sobre cómo configurar el comercio electrónico con WordPress se tratan en el Capítulo 15.
Niveles de afiliación y funciones de usuario
Los profesores tienen un nivel de afiliación de Profesor (a través de Afiliación de pago Pro) y un rol personalizado llamado "Profesor" que les da acceso a crear y editar sus clases, moderar debates en los foros de sus clases y crear y gestionar tareas para sus clases.
Los profesores no tienen acceso al panel de control de WordPress. Crean y gestionan sus clases y tareas a través de formularios frontend creados a tal efecto.
A los estudiantes se les asigna un nivel de afiliación "Estudiante" y el rol predeterminado "Suscriptor" en WordPress. Los estudiantes tienen acceso para ver y participar sólo en las clases a las que son invitados por sus profesores. Los detalles sobre las funciones y capacidades de los usuarios se explican en el Capítulo 6, y el Capítulo 15 trata sobre el uso de los niveles de pertenencia para controlar el acceso.
Las clases son grupos BuddyPress
Cuando los profesores crean "clases", en realidad están creando grupos BuddyPress e invitando a sus alumnos al grupo. Usando BuddyPress, obtenemos foros de clase, mensajería privada y una buena forma de organizar a nuestros usuarios.
Los foros de debate de las clases funcionan con el plugin bbPress. Se genera un nuevo foro para cada clase, y BuddyPress gestiona el acceso a los foros. En el Capítulo 3 encontrarás más información sobre el uso de plugins de terceros como BuddyPress y bbPress.
Las asignaciones son un CPT
Las tareas son un CPT de que utiliza un formulario de envío frontal para que los profesores publiquen nuevas tareas. Las tareas son como las entradas de blog predeterminadas de WordPress, con un título, un cuerpo de contenido y archivos adjuntos. El profesor que publica la tarea es el autor de la entrada.
Nota
WordPress tiene tipos de entradas integrados, como entradas y páginas, y taxonomías integradas, como categorías y etiquetas. Para SchoolPress, vamos a crear nuestros propios CPT y taxonomías. Encontrarás más información sobre la creación de tipos de entrada y taxonomías personalizados en el Capítulo 5.
Los envíos son un (sub)CPT para las asignaciones
Los estudiantes pueden publicar comentarios sobre una tarea, y también pueden elegir publicar su envío oficial para la tarea a través de otro formulario en el frontend.
Los envíos, al igual que las asignaciones, también son CPTs. Los envíos se vinculan a las tareas estableciendo el campo post_parent
del envío con el ID de la tarea a la que se envió. Los estudiantes pueden publicar contenido de texto y también añadir uno o más archivos adjuntos a un envío.
Los semestres son una taxonomía en la clase CPT
Se establece una taxonomía personalizada llamada Semestre para el CPT de grupo/clase. Los administradores de las escuelas pueden añadir nuevos semestres a sus sitios. Por ejemplo, podría crearse un semestre "otoño 2019" y los profesores podrían asignar este semestre al crear sus clases. Así, los alumnos podrían consultar fácilmente una lista de todas las clases de otoño de 2019.
Los departamentos son una taxonomía en la clase CPT
También se configura una taxonomía personalizada llamada Departamento para el CPT del grupo/clase. También está disponible como lista desplegable para los profesores al crear sus clases, y permite a los alumnos navegar por la lista de clases por departamento.
SchoolPress tiene un plugin personalizado principal
Entre bastidores, las partes personalizadas de la aplicación SchoolPress se controlan desde un único plugin personalizado llamado SchoolPress. Éste -el plugin principal- incluye definiciones para los distintos CPT, taxonomías y roles de usuario. También contiene el código para ajustar los plugins de terceros que SchoolPress utiliza, como Paid Memberships Pro y BuddyPress.
El complemento principal también contiene clases para administradores, profesores y alumnos de la escuela que amplían la clase WP_User
y clases para clases, tareas y envíos que envuelven a la clase WP_Post
. Estas clases (PHP) nos permiten organizar nuestro código de una forma orientada a objetos que hace más fácil controlar cómo funcionan juntas nuestras diversas personalizaciones y ampliar nuestro código en el futuro. Es divertido trabajar con estas clases y permiten el código que se muestra en el Ejemplo 1-1.
Ejemplo 1-1. Posibles eventos de inicio de sesión de usuario
if
(
$class
->
isTeacher
(
$current_user
))
{
//this is the teacher, show them teacher stuff
//...
}
elseif
(
$class
->
isStudent
(
$current_user
))
{
//this is a student in the class, show them student stuff
//...
}
elseif
(
is_user_logged_in
())
{
//not logged in, send them to the login form with a redirect back here
wp_redirect
(
wp_login_url
(
get_permalink
(
$class
->
ID
)));
exit
;
}
else
{
//not a member of this class, redirect them to the invite page
wp_redirect
(
$class
->
invite_url
);
exit
;
}
La creación de plugins personalizados se trata en el Capítulo 3, y la ampliación de la clase WP_User
en el Capítulo 6.
SchoolPress utiliza otros plugins personalizados
Ocasionalmente, se desarrollará un poco de código para una aplicación concreta que también sería útil en otros proyectos. Si el código puede contenerse lo suficiente como para que pueda ejecutarse fuera del contexto de la aplicación actual y del complemento principal, puede incorporarse a un complemento personalizado independiente.
Un ejemplo de esto sería el plugin Forzar nombre y apellidos como nombre para mostrar, que era un requisito para este proyecto. No requería ningún código del plugin principal para ejecutarse y es útil para otros sitios de WordPress fuera del contexto de la aplicación SchoolPress. Creamos un plugin independiente para esta funcionalidad y lo mantenemos en el repositorio de WordPress. org para que otros puedan utilizarlo y beneficiarse de él.
SchoolPress utiliza el tema Memberlite
El sitio principal schoolpress.me funciona con un tema hijo Memberlite personalizado. Si el administrador de una escuela se suscribe a un subdominio premium, puede elegir entre varios temas hijo de Memberlite; también puede cambiar los colores, fuentes y logotipos del tema para adaptarlos mejor a la marca de la escuela/clase. Además, todos los temas tienen un diseño adaptable que garantiza que el sitio se vea bien tanto en móviles y tabletas como en ordenadores de sobremesa.
El código del tema Memberlite se limita muy estrictamente a la programación relacionada con la visualización. El código del tema incluye obviamente el HTML y el CSS para el diseño del sitio, pero también contiene alguna lógica sencilla que se integra con el plugin principal de SchoolPress (como el código de ramificación anterior). Sin embargo, cualquier fragmento de código que manipule los tipos de entrada personalizados o los roles de usuario o que implique muchos cálculos se delega en el plugin SchoolPress.
Ahora que hemos establecido lo que es una aplicación, hemos discutido por qué querrías crear una con WordPress, hemos presentado la forma "WordPress" de separar las preocupaciones y hemos descrito a alto nivel nuestra aplicación de ejemplo SchoolPress, vamos a profundizar en el núcleo de WordPress, qué incluye y cómo funciona.
1 Muchas de las ideas de esta sección están influidas por las siguientes entradas del blog: "¿Qué es una aplicación web? ", de Dominique Hazaël-Massieux, y "¿Qué es una aplicación web?", de Bob Baxley.
2 W3Tech realiza encuestas periódicas sobre el uso de distintos sistemas de gestión de contenidos.
3 Yii es un framework PHP basado en MVC. Otros frameworks PHP, como Laravel, son más populares entre los desarrolladores de WordPress y la comunidad PHP en general, pero la documentación relacionada con MVC en el sitio web de Yii está particularmente bien escrita.
Get Creación de aplicaciones web con WordPress, 2ª edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.