Brian Messenlehner Jason Coleman
Novatec
Authorized Portuguese translation of the English edition of Building Web Apps with Wordpress, ISBN 9781449364076 © 2014 Brian Messenlehner, Jason Coleman. This translation is published and sold by permission of O'Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Building Web Apps with Wordpress, ISBN 9781449364076 © 2014 Brian Messenlehner, Jason Coleman Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. 2014. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-377-2 IG20141008 Histórico de impressões: Outubro/2014
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
capítulo 1
Criando aplicações web com o WordPress
Vamos começar definindo o que é uma aplicação web e como ela difere de um site ou de um web service. Na verdade, este livro lhe ajudará a criar de tudo com o WordPress: sites, temas, plugins, web services e aplicações web. Optamos por focar em aplicações web porque elas podem ser vistas como supersites que fazem uso de todas as técnicas que serão discutidas. Há muitas pessoas que acreditam que o WordPress não é eficaz o suficiente ou que não foi feito para criar aplicações web; então trataremos desse assunto mais adiante. Criamos aplicações web com o WordPress há muitos anos e sabemos que é absolutamente possível criar aplicações escaláveis usando o WordPress. Neste capítulo, discutiremos por que o WordPress é um ótimo framework para a criação de aplicações web. Também discutiremos algumas situações em que usar o WordPress não será a melhor maneira de criar sua aplicação web.
O que é um site? Você sabe o que é um site. Um site é um conjunto de uma ou mais páginas web contendo informações e que é acessado por meio de um navegador web.
O que é uma aplicação? Gostamos da definição da Wikipedia: “Um software aplicativo, também conhecido como aplicação ou app, é um software de computador projetado para ajudar o usuário a realizar tarefas específicas”1. 1 N.T.: Tradução livre da citação original em inglês:“Application software, also known as an application or an app, is computer software designed to help the user to perform specific tasks.”
24
Capítulo 1 ■ Criando aplicações web com o WordPress
25
O que é uma aplicação web? Uma aplicação web é somente uma aplicação executada por meio de um navegador web. Observe que, com algumas aplicações web, a tecnologia do navegador permanece oculta, por exemplo, quando sua aplicação web é integrada a uma aplicação Android ou iOS nativa, quando um site é executado como uma aplicação no Google Chrome ou quando uma aplicação é executada usando o Adobe AIR. Entretanto, dentro dessas aplicações, continua havendo um sistema que efetua o parsing de HTML, de CSS e de JavaScript. Você também pode pensar em uma aplicação web como um site com partes parecidas com uma aplicação. Não existe uma linha exata a partir da qual um site se torna uma aplicação web. É uma dessas coisas que você sabe quando vê. O que podemos fazer é explicar algumas das características de uma aplicação web, dar alguns exemplos e tentar chegar a uma definição concisa para que, em geral, você saiba do que estamos falando quando usarmos o termo ao longo do livro. Você verá referências ao SchoolPress enquanto estiver lendo este livro. O SchoolPress é uma aplicação web que estamos criando para ajudar as escolas e os educadores a administrarem seus alunos e os currículos. Todos os exemplos de código estão voltados para funcionalidades que possam existir no SchoolPress. Falaremos mais sobre o conceito geral do SchoolPress posteriormente neste capítulo.
Características de uma aplicação web A seguir, estão algumas características geralmente associadas às aplicações web e às aplicações em geral. Quanto mais dessas características estiverem presentes em um site, mais apropriado será atualizar o seu rótulo para chamá-lo de aplicação web.2 Elementos interativos Uma experiência típica com um site envolve navegar por páginas carregadas, fazer rolagens e clicar em hiperlinks. As aplicações web podem ter links e rolagens também, mas tenderão a usar outros métodos de navegação na aplicação. Os sites com formulários oferecem experiências transacionais. Um exemplo pode ser um formulário de contato em um site ou um formulário de inscrição 2 Muitas das ideias presentes nesta seção sofreram influência destas postagens de blog: “What is a Web Application?” (O que é uma aplicação web?) de Dominique Hazaël-Massieux (http://bit.ly/ wiawa) e “What is a Web Application?” de Bob Baxley (http://bit.ly/wiawa2).
26
Criando Aplicações Web com WordPress
na página de carreiras do site de uma empresa. Os formulários permitem aos usuários interagir com um site usando algo que vá além de um clique. As aplicações web terão ainda outros elementos interativos de UI. Os exemplos incluem barras de ferramenta, elementos para arrastar e soltar, editores de texto rico (rich text) e sliders (controles deslizantes). Tarefas no lugar de conteúdo Lembre-se de que as aplicações web foram “projetadas para ajudar o usuário a realizar tarefas específicas”. Os usuários do Google Maps recebem orientações sobre direções a seguir. Os usuários do Gmail criam emails. Os usuários do Trello administram listas. Os usuários do SchoolPress fazem comentários em discussões de classes. Algumas aplicações continuam focadas em conteúdo. Uma sessão típica com uma aplicação Facebook ou Twitter envolve cerca de 90% de leitura. Entretanto as próprias aplicações apresentam uma maneira de navegar pelo conteúdo de maneira diferente da experiência de navegação web comum. Logins Logins e contas permitem a uma aplicação web salvar informações sobre seus usuários. Essas informações são usadas para facilitar as tarefas principais da aplicação e permitir uma experiência de persistência. Ao ficarem logados, os usuários do SchoolPress podem ver quais discussões não foram lidas. Eles também têm um nome de usuário que identifica suas atividades na aplicação. As aplicações web também podem ter níveis de usuário. O SchoolPress terá administradores que controlam o funcionamento interno da aplicação, professores para criar as classes e alunos que participam das discussões nas classes. Capacidade de se adequar aos dispositivos As aplicações web que executam em seu telefone podem acessar sua câmera, sua agenda, áreas de armazenamento internas e informações de localização do GPS. As aplicações web que executam no desktop podem acessar uma webcam ou um disco rígido local. A mesma aplicação web pode responder de modo diferente, de acordo com o dispositivo que a acessar. As aplicações web se ajustarão a diferentes tamanhos de tela, resoluções e capacidades. Trabalhar offline Sempre que possível, garantir que suas aplicações web funcionem offline é uma boa ideia. Certamente, a interatividade com a Internet é o que define a parte
Capítulo 1 ■ Criando aplicações web com o WordPress
27
“web” da aplicação web, porém um site que não pare de funcionar quando alguém dirige por um túnel se parecerá mais com uma aplicação. Podemos criar rascunhos de emails offline no Gmail. O Evernote permite criar e editar notas offline e sincronizá-las com a Internet quando a conectividade for restaurada. Mashups As aplicações web podem se associar a uma ou mais aplicações web. Uma aplicação web pode utilizar vários web services e APIs para enviar e receber dados. Você pode ter uma aplicação web que extraia informações de localização, como longitude e latitude do Twitter e do Foursquare, e postá-las em um Google Map.
Por que usar o WordPress? Nenhuma linguagem de programação ou ferramenta de software única será adequada para todas as tarefas. Discutiremos o motivo pelo qual você pode não querer usar o WordPress em breve, mas, por enquanto, vamos apresentar algumas situações em que usar o WordPress para criar sua aplicação web será uma boa opção.
Você já está usando o WordPress Se o WordPress já estiver sendo usado em seu site principal, você poderá estar a um simples plugin de distância para adicionar as funcionalidades de que precisa. O WordPress tem ótimos plugins para e-commerce (Jigoshop), fóruns (bbPress), sites com adesão de usuários (Paid Memberships Pro), funcionalidades de redes sociais (BuddyPress) e gamification3 (BadgeOS). Criar sua aplicação em seu site WordPress já existente fará você economizar tempo e facilitará a vida de seus usuários. Portanto, se sua aplicação for bem simples, você poderá criar um plugin personalizado em seu site WordPress para programar a funcionalidade de sua aplicação web. Se você estiver satisfeito com o WordPress usado em seu site já existente, não fique confuso caso as pessoas digam que você deve fazer um upgrade para algo diferente a fim de adicionar determinadas funcionalidades ao seu site. Provavelmente, isso não é verdade. Não é necessário jogar fora todo o trabalho já feito no WordPress, e tudo o que está descrito a seguir são ótimos motivos para permanecer com o WordPress. 3 N.T.: Uso de estratégias e raciocínios comumente utilizados em jogos em outros contextos que não esse.
28
Criando Aplicações Web com WordPress
É fácil fazer gerenciamento de conteúdo com o WordPress O WordPress foi inicialmente desenvolvido como uma plataforma de blogging, porém, ao longo dos anos e com a introdução dos CPTs (Custom Post Types, ou Tipos de post personalizados) na versão 3.0, ele evoluiu para um CMS (Content Management System, ou Sistema de Gerenciamento de Conteúdo) totalmente funcional. Qualquer página ou post pode ser editado pelos administradores por meio do painel, que pode ser acessado pelo seu navegador web. Você aprenderá a trabalhar com CPTs no capítulo 5. O WordPress facilita a adição e a edição de conteúdo por meio de um editor WYSIWYG, portanto não é necessário usar web designers sempre que você quiser fazer uma alteração simples em seu site. Você também pode criar menus personalizados e elementos de navegação para o seu site sem alterar nenhum código. Se sua aplicação web focar em determinados conteúdos (por exemplo, nossa aplicação SchoolPress foca em lições de casa e em discussões), a API Custom Post Types para o WordPress (discutida no capítulo 5) facilitará criar e administrar facilmente esses conteúdos personalizados. Até mesmo as aplicações mais orientadas a tarefas normalmente terão algumas páginas de informações, documentação e vendas. O uso do WordPress para a sua aplicação possibilitará ter um local para administrar sua aplicação e todo o seu conteúdo.
O gerenciamento de usuários é simples e seguro com o WordPress O WordPress tem tudo de que você precisa para adicionar tanto usuários administrativos quanto usuários finais ao seu site. Além de controlar o acesso ao conteúdo, o sistema de Roles and Capabilities (Funções e Capacidades) do WordPress é extensível e permite controlar quais ações estão disponíveis para determinados grupos de usuários. Por exemplo, por padrão, os usuários com a função de colaborador (contributor) podem adicionar novos posts, porém não podem publicá-los. De modo semelhante, você pode criar novas funções e capacidades para administrar quem tem acesso às suas funcionalidades personalizadas. Plugins como o Paid Memberships Pro podem ser usados para estender o gerenciamento de usuários já incluído, a fim de permitir que você defina membros de níveis diferentes e controle os conteúdos aos quais os usuários têm acesso. Por exemplo, você pode criar um nível para conceder acesso a conteúdos especiais aos membros pagantes em seu site WordPress.
Capítulo 1 ■ Criando aplicações web com o WordPress
29
Plugins Existem mais de 27 mil plugins gratuitos no repositório do WordPress (http://wordpress.org/plugins/). Há muito mais plugins, tanto gratuitos quanto pagos, em diversos sites pela Internet. Se você tiver uma ideia para fazer uma extensão em seu site, há uma boa chance de que haverá um plugin para isso, que fará você economizar tempo e dinheiro. Existem alguns plugins indispensáveis que acabaremos usando em quase todos os sites e nas aplicações web que criarmos. Na maioria dos sites que criar, você vai querer colocar a saída em cache para uma navegação mais rápida, usar ferramenta como o Google Analytics para monitorar as visitas, criar mapas do site e ajustar as configurações da página com vistas ao SEO (Seach Engine Optimization, ou Otimização para Mecanismos de Pesquisa), juntamente com várias outras tarefas comuns. Há muitos plugins com ótimos suportes para todas essas funções. Sugerimos nossos favoritos ao longo deste livro; você pode encontrar uma lista deles no site do livro (http://bwawwp.com/plugins/).
Flexibilidade é importante O WordPress é um framework maduro, capaz de realizar muitas tarefas. Além do mais, ele foi implementado com base nas tecnologias PHP, JavaScript e MySQL, portanto tudo o que você puder criar usando PHP/MySQL (ou seja, praticamente qualquer coisa) pode ser facilmente encaixado em sua aplicação WordPress. O WordPress e o PHP/MySQL em geral não são perfeitos para todas as tarefas, porém são bastante adequados para uma ampla variedade delas. Ter uma plataforma que irá crescer juntamente com seu negócio pode permitir que você entre em ação rapidamente. Por exemplo, aqui está uma progressão típica do site de uma empresa startup enxuta que utiliza o WordPress: 1. Anuncie sua startup por meio de um site de uma página. 2. Adicione um formulário para coletar endereços de email. 3. Acrescente um blog. 4. Foque em SEO e otimize todo o conteúdo. 5. Envie postagens de blog para o Twitter e para o Facebook. 6. Acrescente fóruns.
30
Criando Aplicações Web com WordPress
7. Utilize o plugin Paid Memberships Pro para permitir que os clientes paguem pelo acesso. 8. Adicione formulários personalizados, ferramentas e recursos à aplicação para os membros pagantes. 9. Atualize a UI usando AJAX. 10. Ajuste o site e o servidor para que possam ser escalados. 11. Faça a localização do site ou da aplicação para diferentes países e idiomas. 12. Crie wrappers iOS e Android para a aplicação. O aspecto interessante em relação a percorrer esse caminho é que, a cada passo, você terá o mesmo banco de dados de usuários e estará usando a mesma plataforma de desenvolvimento.
Atualizações de segurança frequentes O fato de o WordPress ser usado em milhões de sites o transforma em um alvo para hackers que tentam burlar sua segurança. Alguns desses hackers foram bemsucedidos no passado; no entanto os desenvolvedores responsáveis pelo WordPress são rápidos para cuidar das vulnerabilidades e disponibilizar atualizações para corrigi-las. É como ter milhões de pessoas testando constantemente e corrigindo o seu software, pois é exatamente isso o que acontece. A arquitetura subjacente do WordPress faz com que a aplicação dessas atualizações seja um processo rápido e sem complicações, até mesmo para os usuários web inexperientes. Se você for inteligente para configurar o WordPress e fazer as atualizações com as versões mais recentes quando elas estiverem disponíveis, o WordPress será uma plataforma muito mais segura para o seu site do que qualquer outro software disponível. A segurança será discutida com mais detalhes no capítulo 8.
Custo O WordPress é gratuito. O PHP é gratuito. O MySQL é gratuito. A maioria dos plugins é gratuita. A hospedagem é paga. Porém, conforme o tamanho de sua aplicação web e o volume de tráfego obtido, esse custo pode ser relativamente baixo. Se você precisar de funcionalidades personalizadas que não se encontrem em nenhum plugin existente, pode ser que seja necessário pagar um desenvolvedor para criá-las. Ou, se você mesmo for um desenvolvedor, haverá o custo de seu tempo.
Capítulo 1 ■ Criando aplicações web com o WordPress
31
Vamos comparar a criação de uma aplicação web simples no WordPress com a criação de uma aplicação web .NET simples desde o início:
Aplicação .NET 1. IIS – Pago por licença 2. Servidor SQL– Pago por licença 3. Desenvolvedores .NET normalmente custam mais que desenvolvedores PHP. 4. É preciso pagar para criar um esquema de banco de dados sólido. 5. É preciso pagar para criar funções auxiliares para transferir dados de e para seu banco de dados. 6. É preciso pagar para criar um processo de login para seus usuários. 7. É preciso pagar para desenvolver qualquer funcionalidade personalizada necessária. 8. Segurança! Você não tem ideia de como sua aplicação se portará na Internet, mas irá pagar para tentar torná-la o mais seguro possível.
Aplicação WordPress 1. Apache – $0 2. MySQL – $0 3. Desenvolvedores PHP normalmente custam menos que desenvolvedores .NET e são muito mais simpáticos! Isso é um fato. 4. O WordPress tem um esquema de banco de dados comprovado e pronto para ser usado. 5. O WordPress tem inúmeras funções auxiliares para interagir com o banco de dados e, na maioria dos casos, você pode utilizar CPTs e taxonomias para armazenar e classificar seus dados sem usar muito código. 6. O WordPress já tem um processo sólido de login. 7. Você pode obter a maior parte das funcionalidades necessárias a partir de plugins gratuitos de terceiros. Se algum desenvolvimento personalizado for necessário, será apenas para funcionalidades específicas que ainda não existam. 8. Segurança! O WordPress é executado em aproximadamente 20% de todos os sites da Internet. Você pode apostar que ele é uma das plataformas mais seguras que existem (não crie sua senha de administrador como “password”).
32
Criando Aplicações Web com WordPress
Em suma, você pode criar uma aplicação de qualquer tamanho com o WordPress, e em nove entre dez vezes ela custará menos e exigirá menos tempo para ser desenvolvida quando comparada a qualquer outra plataforma.
Respostas a algumas críticas comuns ao WordPress Há algumas vozes bastante críticas contra o WordPress, que afirmam que ele não é um bom framework para a criação de aplicações web ou que o WordPress nem mesmo chega a ser um framework. Com todo o devido respeito às pessoas que defendem essas opiniões, gostaríamos de mostrar por que não concordamos com elas. Veja a seguir algumas das críticas comuns. O WordPress serve apenas para blogs. Muitas pessoas acreditam que, como o WordPress foi criado inicialmente para administrar um blog, ele é bom somente para administrar blogs.
Afirmações como essa eram verdadeiras alguns anos atrás, porém o WordPress, desde então, implementou uma funcionalidade robusta de CMS, tornando-o útil para outros sites focados em conteúdo. O WordPress atualmente é o CMS mais popular em uso, com mais de 50% de participação no mercado.4 A figura 1.1 mostra um slide da apresentação “State of WordPress” (Situação do WordPress) de Matt Mullenweg, feita no WordCamp em São Francisco em 2013. A pirâmide invertida à esquerda representa o WordPress aproximadamente no ano de 2006, com a maior parte do código dedicada à aplicação de blog e um pouco de código de CMS e de plataforma para sustentá-lo. A pirâmide à direita representa a situação atual da plataforma WordPress, em que a maior parte do código está na própria plataforma, com uma camada de CMS sobre ela e a aplicação de blog executada sobre a camada de CMS. O WordPress é uma plataforma muito mais estável em relação ao que era alguns anos atrás.
Blog CMS
Plataforma
Blog
CMS
Plataforma Figura 1.1 – Diagramas da apresentação “State of WordPress” (Situação do WordPress) de Matt Mullenweg em 2013. O WordPress nem sempre foi tão estável. 4 O W3Tech (http://bit.ly/w3techs) faz pesquisas frequentes sobre o uso de diferentes sistemas de gerenciamento de conteúdo.
Capítulo 1 ■ Criando aplicações web com o WordPress
33
A API Custom Post Types pode ser usada para ajustar sua instalação do WordPress de modo a suportar outros tipos de conteúdo além de postagens de blog ou páginas. Esse assunto será discutido em detalhes no capítulo 5. O WordPress serve apenas para sites de conteúdo. Semelhante à turma do “apenas para blogs”, algumas pessoas dirão que o WordPress serve somente para sites de conteúdo.
O WordPress é a opção evidente para qualquer site relacionado a conteúdo. Entretanto, como veremos em detalhes neste mesmo livro, o WordPress é um ótimo framework para criar aplicações web mais interativas também. O principal recurso que permite ao WordPress ser usado como um framework é a API de plugins, que permite que você se atrele ao modo de funcionamento default do WordPress e faça alterações. Você não só pode usar os milhares de plugins disponíveis no repositório do WordPress e em outros locais na Internet como também pode usar a API de plugins para criar seus próprios plugins personalizados e fazer o WordPress realizar tudo o que for possível usando PHP/MySQL. O WordPress não é escalável. Algumas pessoas apontarão para uma instalação default do WordPress sendo executada em um provedor de hospedagem simples, observarão como o site se torna lento ou provoca falhas quando há muita carga e concluirão que o WordPress não é escalável.
Podemos provar que essa afirmação é falsa. O WordPress.com executa sobre o mesmo software básico usado em qualquer site WordPress e, na época desta publicação, estava em algum ponto entre o 13o e o 22o site mais visitado do mundo.5 Os problemas em escalar com o WordPress são os mesmos que você teria ao escalar qualquer aplicação: fazer caching de páginas e de dados e tratar as chamadas ao banco de dados de forma mais rápida. Podemos aprender com o modo pelo qual sites grandes como o WordPress.com, o TechCrunch e os blogs do The New York Times escalaram com o WordPress. De modo semelhante, a maioria das lições aprendidas ao escalar aplicações PHP/MySQL em geral se aplica também ao WordPress. O processo de escalar aplicações com o WordPress será discutido em detalhes no capítulo 16. O WordPress não é seguro. Como qualquer outro produto de código aberto, há uma contrapartida quando se trata de segurança ao usar o WordPress.
Por um lado, como o WordPress é muito popular, ele será alvo de hackers que procuram explorar falhas de segurança. E, pelo fato de o código ser aberto, será mais fácil descobrir essas falhas de segurança. 5 Top sites do Quantcast (http://www.quantcast.com/top-sites) e do Alexa (http://www.alexa.com/topsites).
34
Criando Aplicações Web com WordPress
Por outro lado, como o WordPress tem código aberto, você ouvirá falar dessas falhas de segurança quando elas se tornarem públicas e, provavelmente, haverá outra pessoa corrigindo-as para você. Nós nos sentimos mais seguros sabendo que há muitas pessoas por aí tentando explorar as falhas de segurança do WordPress e a mesma quantidade delas trabalhando para tornar o WordPress mais seguro contra essas explorações de falha. Não acreditamos em “segurança por meio de obscuridade”, exceto como uma medida adicional. Preferimos que as brechas de segurança em nosso software apareçam explicitamente em vez de passarem despercebidas até o pior momento possível. No capítulo 8 discutiremos os problemas de segurança com mais detalhes, incluindo uma lista das melhores práticas para tornar sua instalação do WordPress mais robusta e mostrando como codificar de forma segura. Os plugins do WordPress são um lixo. A API de plugin do WordPress e os milhares de plugins que foram desenvolvidos e que a utilizam são o segredo da receita e, em nossa opinião, o motivo principal pelo qual o WordPress se tornou tão popular e tão bem-sucedido como plataforma para sites.
Algumas pessoas dirão: “Concordo, há milhares de plugins, mas são todos um lixo!”. Tudo bem, alguns dos plugins existentes por aí são um lixo. Porém há muitos plugins que, definitivamente, não são lixo. O Paid Memberships Pro, desenvolvido pelo nosso coautor Jason Coleman, não é um lixo. Usar o Paid Memberships Pro para lidar com a cobrança e a administração dos usuários inscritos permitirá que você foque seus esforços de desenvolvimento na competência principal de sua aplicação, em vez de focar em como integrar seu site a um gateway de pagamento. Muitos plugins realizam tarefas muito simples (por exemplo, ocultar a barra de administração para os que não são administradores), funcionam exatamente como anunciado e realmente não deixam espaço para serem considerados como lixo. Mesmo os plugins ruins podem ser corrigidos, reescritos ou emprestados para que funcionem melhor. Às vezes, você poderá achar mais fácil reescrever um plugin ruim em vez de corrigi-lo. No entanto você ainda estará muito mais à frente do que estaria se tivesse de criar tudo por conta própria desde o início. Ninguém está forçando você a usar os plugins do WordPress sem que você mesmo os avalie. Se estiver criando uma aplicação web séria, você mesmo irá conferir o código do plugin, corrigi-lo para que atenda aos seus padrões, e prosseguirá com o desenvolvimento.
Capítulo 1 ■ Criando aplicações web com o WordPress
35
Quando não usar o WordPress O WordPress não é a solução para todas as aplicações. Aqui estão alguns casos em que você não deve usar o WordPress para criar sua aplicação.
Você planeja cobrar uma licença ou vender a tecnologia de seu site O WordPress utiliza a GNU (General Public License) [Licença Pública Geral], versão 2 (GPLv2), que tem restrições quanto ao modo de distribuir qualquer software criado com ela. Ou seja, você não pode restringir o que as pessoas farão com o seu software depois que você vendê-lo ou distribuí-lo. Este é um assunto complicado, porém a ideia básica é que, se você estiver somente vendendo ou concedendo acesso à sua aplicação, não será necessário se preocupar com a GPLv2. Entretanto, se você estiver vendendo ou distribuindo o código-fonte subjacente de sua aplicação, a GPLv2 se aplicará ao código-fonte distribuído. Por exemplo, se hospedarmos o SchoolPress em nossos próprios servidores e cobrarmos pelas contas para acessar a aplicação, isso não será considerado distribuição e a GPLv2 não exercerá nenhum impacto sobre o nosso negócio. Contudo, se quiséssemos permitir que as escolas instalassem o software para ser executado em seus próprios servidores, teríamos de compartilhar o código-fonte com elas. Isso seria considerado um ato de distribuição. Nossos clientes teriam o direito legal de distribuir nosso código-fonte gratuitamente, mesmo que os tivéssemos cobrado inicialmente pelo software. Teríamos de usar a licença GPLv2, que não nos permite restringir o que eles podem fazer com o código depois de o terem baixado.
Há outra plataforma que fará você “chegar lá” mais rapidamente Se você tiver uma equipe de desenvolvedores experientes em Ruby, use o Ruby para criar sua aplicação web. Se houver uma plataforma, um framework ou um pacote que inclua 80% dos recursos necessários para a sua aplicação web e o WordPress não tiver nada semelhante, provavelmente você deverá usar essa outra plataforma.
A flexibilidade NÃO é importante para você Um dos melhores recursos de um site WordPress é sua capacidade de alterar partes de seu site para que atendam melhor às suas necessidades rapidamente. Por exemplo, se as “curtidas” do Facebook pararem de resultar em tráfego, você poderá remover seu plugin de conexão com o Facebook e instalar um para o Google+.
36
Criando Aplicações Web com WordPress
Em geral, atualizar seu tema ou trocar de plugins em um site WordPress será mais rápido que desenvolver recursos a partir do zero em outra plataforma. No entanto, nos casos em que a otimização e o desempenho forem mais importantes do que ser capaz de atualizar rapidamente a aplicação, programar uma aplicação nativa ou programar diretamente em PHP será uma opção mais adequada. Por exemplo, se sua aplicação for realizar uma única tarefa simples (por exemplo, apenas apresentar o horário corrente), você vai querer criá-la em um nível mais baixo. De modo semelhante, se você tiver os recursos que o Facebook tem, poderá se dar o luxo de criar tudo manualmente e usar compiladores personalizados de PHP para C para ganhar alguns milissegundos nos tempos de carga de seu site.
Sua aplicação deve ser realmente de tempo real Uma das potenciais desvantagens do WordPress, sobre o qual falaremos mais adiante, está no fato de ele depender da arquitetura típica de um servidor web. Na instalação normal do WordPress, um usuário acessa um URL, que atinge um servidor web (como o Apache) por meio de HTTP, inicia um script PHP para gerar a página e, em seguida, a página completa é retornada ao usuário. Há maneiras de melhorar o desempenho dessa arquitetura usando técnicas de caching e/ou instalações otimizadas de servidores. Você pode tornar o WordPress assíncrono ao usar chamadas AJAX ou acessar o banco de dados por meio de clientes alternativos. Entretanto, se sua aplicação tiver de ser de tempo real e totalmente assíncrona (por exemplo, uma aplicação do tipo sala de bate-papo ou um jogo para múltiplos jogadores), você terá nossa bênção para pensar duas vezes antes de usar o WordPress. Muitos desenvolvedores do WordPress, incluindo Matt Mullenweg, o criador e o líder espiritual do WordPress, compreendem essa limitação. É muito provável que o core (núcleo) do WordPress será atualizado ao longo do tempo para funcionar melhor em aplicações assíncronas de tempo real (a API Heartbeat disponibilizada na versão 3.6 do WordPress é um bom passo nessa direção), porém, no momento, você irá enfrentar uma batalha difícil para fazer o WordPress funcionar assincronamente com o mesmo desempenho de uma aplicação nativa ou de algo criado com o Node.js ou outras tecnologias especificamente voltadas para aplicações de tempo real.
Capítulo 1 ■ Criando aplicações web com o WordPress
37
O WordPress como um framework de aplicação Sistemas de gerenciamento de conteúdo como o WordPress, o Drupal e o Joomla com frequência são deixados de lado em discussões sobre frameworks, porém, na realidade, o WordPress (em particular) é realmente ótimo para aquilo que se supõe que os frameworks devam fazer: criar aplicações rapidamente. Em minutos, você pode instalar o WordPress e ter uma aplicação totalmente funcional com inscrições de usuários, gerenciamento de sessão, gerenciamento de conteúdo e um painel para monitorar a atividade do site. As diversas APIs, os objetos comuns e as funções auxiliares discutidos ao longo deste livro possibilitarão codificar aplicações complexas de forma rápida, sem a necessidade de se preocupar com a integração de sistemas de níveis mais baixos. A figura 1.2 mostra o triângulo da direita da apresentação “State of WordPress” (Situação do WordPress) de Mullengweg em 2013, representando uma plataforma WordPress estável, com uma camada de CMS sobre ela e uma aplicação de blogging sobre a camada de CMS. A verdade é que a maior parte da base de código atual do WordPress suporta a plataforma de aplicação subjacente. Você pode pensar em cada versão do WordPress como um framework de aplicação com uma aplicação de blogging de exemplo incluída.
Blog
CMS
Plataforma Figure 1.2 – A plataforma WordPress.
WordPress versus frameworks MVC MVC quer dizer Model-View-Controller (Modelo-Visão-Controlador) e é um padrão de projeto comum utilizado em muitos frameworks para desenvolvimento de software. As principais vantagens de usar uma arquitetura MVC estão na possibilidade de reutilização de código e na separação de responsabilidades. O WordPress não usa uma arquitetura MVC, porém, à sua própria maneira, estimula a reutilização de código e a separação de responsabilidades.
38
Criando Aplicações Web com WordPress
Explicarei a arquitetura MVC bem resumidamente e como ela se mapeia a um processo de desenvolvimento WordPress. Esta seção deve ajudar os leitores familiarizados com frameworks baseados em MVC a entenderem como abordar o desenvolvimento com o WordPress de modo semelhante. A figura 1.3. descreve uma aplicação típica baseada em MVC. O usuário final utiliza um controlador (controller), que manipula o estado e os dados da aplicação por meio de um modelo (model) que, por sua vez, atualiza uma visão (view) apresentada ao usuário. Por exemplo, em uma aplicação de blog, um usuário poderá estar vendo a página de postagens mais recentes (uma visão). O usuário clica no título de uma postagem, o que o direcionará para um novo URL (um controlador), o qual carregará os dados da postagem (em um modelo) e a postagem única será exibida (outra visão). MODELO Atualiza
Manipula
VISÃO
CONTROLADOR
Vê
Usa USUÁRIO
Figura 1.3 – Como funciona o MVC.
A arquitetura MVC suporta a reutilização de código ao permitir que os modelos, as visões e os controladores interajam. Por exemplo, tanto a visão das postagens recentes quanto de postagens únicas podem usar o mesmo modelo ao exibir os dados das postagens. Os mesmos modelos podem ser usados no frontend para exibir as postagens e no backend para alterá-las. A arquitetura MVC suporta a separação de responsabilidades ao permitir que os designers foquem sua atenção nas visões, enquanto os programadores focam nos modelos. Você pode tentar usar uma arquitetura MVC no WordPress. Há diversos projetos para ajudar você a fazer exatamente isso; no entanto achamos que tentar amarrar o MVC no WordPress pode resultar em problemas, a menos que o núcleo do WordPress passe a suportar oficialmente o MVC. Em vez de fazer isso, sugerimos seguir o “Modo WordPress”, conforme apresentado neste livro. Mas se você estiver interessado...
Capítulo 1 ■ Criando aplicações web com o WordPress
39
Plugins MVC para o WordPress • WP MVC (http://bit.ly/wp-mvc) • Churro (http://bit.ly/churro-plugin) • Tina MVC (http://bit.ly/tina-mvc) Há algumas maneiras de mapear um processo MVC ao WordPress.
Modelos = plugins Em um framework MVC, o código que armazena as estruturas de dados subjacentes e a lógica do negócio encontra-se nos modelos. É nesse local que os programadores gastarão a maior parte de seu tempo. No WordPress, os plugins são os locais apropriados para armazenar novas estruturas de dados, lógicas de negócio complexas e definições de tipos de post personalizados. Essa comparação não se sustenta de acordo com alguns aspectos. Em primeiro lugar, muitos plugins adicionam funcionalidades semelhantes às de visão e contêm elementos de design. Tome qualquer plugin que adicione um widget a ser usado em suas páginas. Em segundo lugar, os formulários e outros componentes de design usados no painel do WordPress em geral são tratados também por plugins. Uma maneira de fazer a separação das responsabilidades de forma mais clara ao adicionar componentes associados à visão aos seus plugins do WordPress consiste em criar uma pasta “templates” ou “pages” e colocar aí o seu código de frontend. Uma prática comum consiste em permitir que os templates sobrescrevam o template usado pelo plugin. Por exemplo, ao usar o WordPress com o plugin Paid Memberships Pro, você pode colocar uma pasta chamada “paid-memberships-pro/pages” em seu tema ativo para sobrescrever os templates default da página.6
Visões = temas Em um framework MVC, o código para exibir os dados ao usuário está implementado nas visões. É nesse local que os designers gastarão a maior parte de seu tempo. No WordPress, os temas são os locais apropriados para armazenar o código e a lógica dos templates. Novamente, a comparação aqui não tem um mapeamento de um para um, porém “visões = temas” é um bom ponto de partida. 6 Essa técnica para sobrescrever os templates do plugin será discutida no capítulo 4.
40
Criando Aplicações Web com WordPress
Controladores = carregador de templates Em um framework MVC, o código para processar os dados de entrada dos usuários (na forma de URLs ou dos dados de $_GET ou $_POST) e decidir quais modelos e visões devem ser usados para cuidar de uma solicitação está contido nos controladores. O código do controlador normalmente é tratado por um programador e, com frequência, é criado uma só vez e esquecido. A parte principal da programação em uma aplicação MVC está nos modelos e nas visões. No WordPress, todas as solicitações de página (a menos que elas estejam acessando um arquivo .html em cache) são processadas por meio do arquivo index.php e são processadas pelo WordPress de acordo com a Hierarquia dos Templates (Template Hierarchy). O carregador de templates descobre qual arquivo de template deve ser usado para exibir a página ao usuário final. Por exemplo, utilize search.php para mostrar resultados de pesquisa, single.php para mostrar um único post etc. O comportamento-padrão pode ser personalizado por meio da API WP_Rewrite (discutida no capítulo 7) e de outros hooks (ganchos) e filtros. Informações do Codex sobre a Hierarquia de Templates (http://bit.ly/temp-hier) está disponível online; a Hierarquia de Templates será discutida com mais detalhes no capítulo 4. Para compreender melhor o funcionamento dos frameworks MVC, o framework PHP Yii (http://bit.ly/yii-guide) tem um ótimo recurso que explica como utilizar sua arquitetura MVC da melhor maneira possível. Para entender melhor como desenvolver aplicações web usando o WordPress como um framework, continue lendo este livro.
A anatomia de uma aplicação WordPress Nesta seção, descreveremos a aplicação que criamos para acompanhar este livro: o SchoolPress. Discutiremos a funcionalidade pretendida para o SchoolPress, veremos como ele funciona e quem irá usá-lo e – o mais importante para este livro – como cada parte da aplicação será criada no WordPress. Não se assuste caso você não entenda algumas das terminologias a seguir. Nos capítulos posteriores, discutiremos com mais detalhes tudo o que está sendo apresentado aqui. Sempre que possível, indicaremos o capítulo deste livro que corresponde ao recurso sendo discutido.
Capítulo 1 ■ Criando aplicações web com o WordPress
41
O que é o SchoolPress? O SchoolPress é uma aplicação web que facilita aos professores interagir com seus alunos fora da sala de aula. Os professores podem criar classes e convidar seus alunos para participarem delas. Cada classe tem um fórum para discussões ad hoc, além de um sistema mais estruturado para os professores postarem lições de casa (assignments) e os alunos entregarem suas tarefas. A aplicação funcional pode ser encontrada no site do SchoolPress ( http:// schoolpress.me). O código-fonte do SchoolPress está disponível no GitHub (https://github.com/bwawwp/schoolpress).
O SchoolPress executa em uma rede WordPress Multisite O SchoolPress executa uma versão multisite do WordPress. O site principal em schoolpress.me hospeda contas gratuitas, em que os professores podem se inscrever e começar a administrar suas classes. O site também tem todas as informações de marketing para ter sites separados de escolas na rede, incluindo a página para inscrição e checkout para um nível de adesão pago. As escolas podem pagar uma taxa anual para criar um subdomínio exclusivo para suas escolas, por exemplo, yourschool.schoolpress.me, que irá hospedar classes para seus professores e oferecerá um controle mais detalhado, além de relatórios, para todas as classes de toda a escola. Os detalhes sobre o uso de uma rede multisite com o WordPress podem ser encontrados no capítulo 13.
O modelo de negócios do SchoolPress O SchoolPress utiliza os plugins Paid Memberships Pro, PMPro Register Helper e PMPro Network para personalizar o processo de inscrição e aceitar pagamentos com cartão de crédito para as escolas se registrarem. As escolas podem comprar um subdomínio exclusivo para elas mediante uma taxa anual. Nenhum outro usuário do SchoolPress paga pelo acesso. Ao se inscreverem, os administradores das escolas podem especificar o nome da escola e um slug para o seu subdomínio (myschool.schoolpress.me). Um novo site na rede será criado e eles terão acesso a uma versão simplificada do painel do WordPress para o seu site. O administrador da escola então convida os professores para entrarem no sistema. Os professores também podem solicitar um convite para uma escola, que deve ser aprovado pelo administrador da escola.
42
Criando Aplicações Web com WordPress
Os professores podem convidar os alunos para as classes que eles criarem. Os alunos também podem solicitar um convite para uma classe, que deve ser aprovado pelo professor. Os professores também podem se inscrever gratuitamente para hospedar suas classes em schoolpress.me. As páginas hospedadas nesse subdomínio podem apresentar propagandas e outros esquemas para monetização. Os detalhes de como configurar o e-commerce com o WordPress podem ser encontrados no capítulo 15.
Níveis de adesão e funções de usuários Os professores recebem um nível de adesão igual a Teacher (por meio do Paid Memberships Pro) e uma função (role) personalizada chamada “Teacher” que lhes dá acesso para criar e alterar suas classes, moderar discussões nos fóruns de suas classes e criar e administrar lições de casa para suas classes. Os professores não têm acesso ao painel do WordPress. Eles criam e administram suas classes e as lições de casa por meio de formulários no frontend, criados com esse propósito. Os alunos recebem um nível de adesão igual a “Student” e a função default “Subscriber” no WordPress. Os alunos têm acesso somente para visualizar e participar das classes às quais forem convidados pelos seus professores. Os detalhes sobre as funções e capacidades dos usuários podem ser encontrados no capítulo 6. Os detalhes sobre o uso dos níveis de adesão para controlar o acesso podem ser encontrados no capítulo 15.
As classes são grupos BuddyPress Quando os professores criam “classes”, na realidade, eles estão criando grupos BuddyPress e convidando seus alunos para o grupo. Ao usar o BuddyPress, temos fóruns para a classe, um sistema de mensagens privadas e uma boa maneira de organizar nossos usuários. Os fóruns de discussão das classes utilizam o plugin bbPress. Um novo fórum é criado para cada classe, e o BuddyPress administra o acesso aos fóruns. Os detalhes sobre como tirar proveito de plugins de terceiros, como o BuddyPress e o bbPress, podem ser encontrados no capítulo 3.
Capítulo 1 ■ Criando aplicações web com o WordPress
43
As lições de casa são um tipo de post personalizado As lições de casa (assignments) são um CPT (Custom Post Type, ou Tipo de post personalizado), com um formulário de submissão no frontend para que os professores possam postar novas lições de casa. As lições de casa são como as postagens default de blogs no WordPress, com um título, um conteúdo e arquivos anexos. O professor que posta a lição de casa é o autor do post. O WordPress tem tipos de post prontos, como posts e páginas, além de taxonomias prontas, como categorias e tags. Para o SchoolPress, estamos criando nossos próprios CPTs e taxonomias. Os detalhes sobre a criação de CPTs e taxonomias podem ser encontrados no capítulo 5.
As submissões são um (sub) CPT das lições de casa Os alunos podem postar comentários sobre uma lição de casa e podem também optar por postar sua submissão oficial para a lição de casa por meio de outro formulário do frontend. As submissões, assim como as lições de casa, também são CPTs. As submissões estão ligadas às lições de casa ao definir o campo post_parent da submissão com o ID da lição de casa à qual a submissão foi feita. Os alunos podem postar conteúdo textual, além de adicionar um ou mais anexos a uma submissão.
Os semestres são uma taxonomia do CPT classe Uma taxonomia personalizada chamada “Semester” (Semestre) é criada para o CPT grupo/classe. Os administradores das escolas podem adicionar novos semestres a seus sites. Por exemplo, um semestre “fall 2013” (outono de 2013) pode ser criado e os professores podem atribuir esse semestre ao criar suas classes. Então os alunos podem ver facilmente uma lista de todas as classes do outono de 2013 e navegar por elas.
Os departamentos são uma taxonomia do CPT classe Uma taxonomia personalizada chamada “Department” (Departamento) também é criada para o CPT grupo/classe. Ela também está disponível na forma de uma lista suspensa para os professores quando eles criam suas classes e possibilita obter uma lista de classes por departamento pela qual é possível navegar.
44
Criando Aplicações Web com WordPress
O SchoolPress tem um plugin personalizado principal Internamente, as partes personalizadas da aplicação SchoolPress são controladas a partir de um único plugin personalizado chamado SchoolPress. Esse plugin – que é o principal – inclui as definições dos vários tipos de post personalizados, as taxonomias e as funções dos usuários. Ele também contém o código para ajustar os plugins de terceiros utilizados pelo SchoolPress, como o Paid Memberships Pro e o BuddyPress. O plugin principal também contém as classes para os administradores das escolas, os professores e os alunos, que estendem a classe WP_User, além de classes para as classes, as lições de casa e as submissões, que encapsulam a classe WP_Post. Essas classes (PHP) permitem organizar nosso código de forma orientada a objetos, o que facilita controlar como nossas várias personalizações funcionam em conjunto, além de facilitar estender o nosso código no futuro. É divertido trabalhar com essas classes, e elas possibilitam ter o código que você vê no exemplo 1.1.
Exemplo 1.1 – Eventos possíveis no login de usuário if($class->isTeacher($current_user)) { // é um professor, mostra dados pertinentes aos professores //... } elseif($class->isStudent($current_user)) { // é um aluno, mostra dados pertinentes aos alunos //... } elseif(is_user_logged_in()) { // não está logado, envia-o para o formulário de login com um redirecionamento de // volta para cá wp_redirect(wp_login_url(get_permalink($class->ID))); exit; } else { // não é membro desta classe, redireciona-o para a página de convite wp_redirect($class->invite_url); exit; }
A criação de plugins personalizados será discutida no capítulo 3. A extensão da classe WP_User será discutida no capítulo 6.
Capítulo 1 ■ Criando aplicações web com o WordPress
45
O SchoolPress usa outros plugins personalizados Ocasionalmente, um pouco de código será desenvolvido para uma aplicação em particular, que também será útil em outros projetos. Se o código puder ser contido o suficiente para que possa executar fora do contexto da aplicação corrente e do plugin principal, ele poderá ser criado de modo a compor um plugin separado e personalizado. Um exemplo disso pode ser o plugin force-first-name-last-name, que foi um requisito deste projeto. Ele não exigiu nenhuma parte do código do plugin principal para ser executado e pode ser útil em outros sites WordPress fora do contexto da aplicação SchoolPress.
O SchoolPress usa o framework de temas StartBox O site principal schoolpress.me executa com um tema-filho personalizado do StartBox. Se uma escola se inscreve para ter um subdomínio especial, ela poderá escolher entre uma variedade de temas filhos do StartBox; ela também poderá alterar qualquer cor, fonte e logo do tema para que se tornem mais adequados à sua marca. Todos os temas usam um design responsivo que garante que o site terá uma boa aparência em displays móveis e em tablets, bem como em displays desktop. O código do tema do StartBox (http://wpstartbox.com) é estritamente limitado à programação relacionada a display. O código do tema obviamente inclui o HTML e o CSS para o layout do site, mas contém também um pouco de lógica simples que se integra ao plugin principal do SchoolPress (como o código do plugin adicional anterior). No entanto qualquer porção de código que manipule os tipos de post personalizados ou as funções dos usuários ou que envolva muito processamento será de responsabilidade do plugin SchoolPress.