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: [email protected] Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Sumário Prefácio..................................................................................................................................17 Apresentação..........................................................................................................................23 Capítulo 1 ■ Criando aplicações web com o WordPress..............................................................24 O que é um site?..................................................................................................... 24 O que é uma aplicação?........................................................................................... 24 O que é uma aplicação web?.................................................................................... 25 Características de uma aplicação web................................................................. 25 Por que usar o WordPress?....................................................................................... 27 Você já está usando o WordPress........................................................................ 27 É fácil fazer gerenciamento de conteúdo com o WordPress................................... 28 O gerenciamento de usuários é simples e seguro com o WordPress....................... 28 Plugins.............................................................................................................. 29 Flexibilidade é importante................................................................................. 29 Atualizações de segurança frequentes................................................................. 30 Custo................................................................................................................ 30 Aplicação .NET..................................................................................................31 Aplicação WordPress...........................................................................................31 Respostas a algumas críticas comuns ao WordPress............................................. 32 Quando não usar o WordPress................................................................................. 35 Você planeja cobrar uma licença ou vender a tecnologia de seu site...................... 35 Há outra plataforma que fará você “chegar lá” mais rapidamente.......................... 35 A flexibilidade NÃO é importante para você....................................................... 35 Sua aplicação deve ser realmente de tempo real................................................... 36 O WordPress como um framework de aplicação....................................................... 37 WordPress versus frameworks MVC................................................................... 37 A anatomia de uma aplicação WordPress.................................................................. 40 O que é o SchoolPress?.......................................................................................41 O SchoolPress executa em uma rede WordPress Multisite.....................................41 O modelo de negócios do SchoolPress.................................................................41 Níveis de adesão e funções de usuários............................................................... 42 As classes são grupos BuddyPress....................................................................... 42 5 6 Criando Aplicações Web com WordPress As lições de casa são um tipo de post personalizado............................................ 43 As submissões são um (sub) CPT das lições de casa............................................ 43 Os semestres são uma taxonomia do CPT classe................................................. 43 Os departamentos são uma taxonomia do CPT classe......................................... 43 O SchoolPress tem um plugin personalizado principal........................................ 44 O SchoolPress usa outros plugins personalizados................................................ 45 O SchoolPress usa o framework de temas StartBox.............................................. 45 Capítulo 2 ■ Básico do WordPress.............................................................................................46 A estrutura de diretórios do WordPress.................................................................... 47 Diretório-raiz.................................................................................................... 47 /wp-admin........................................................................................................ 47 /wp-includes...................................................................................................... 47 /wp-content....................................................................................................... 47 Estrutura de banco de dados do WordPress.............................................................. 48 wp_options....................................................................................................... 49 Funções que se encontram em /wp-includes/option.php...................................... 49 wp_users............................................................................................................52 Funções que se encontram em /wp-includes/…....................................................52 wp_usermeta..................................................................................................... 56 wp_posts............................................................................................................61 Funções que se encontram em /wp-includes/post.php......................................... 62 wp_postmeta..................................................................................................... 65 Funções que se encontram em /wp-includes/post.php......................................... 66 wp_comments................................................................................................... 70 Funções que se encontram em /wp-includes/comment.php................................. 70 Funções que se encontram em /wp-includes/comment.php................................. 76 wp_links........................................................................................................... 79 wp_terms.......................................................................................................... 80 Funções que se encontram em /wp-includes/taxonomy.php................................. 80 wp_term_taxonomy........................................................................................... 83 Funções que se encontram em /wp-includes/taxonomy.php................................. 83 wp_term_relationships...................................................................................... 84 Estendendo o WordPress......................................................................................... 86 Capítulo 3 ■ Tirando proveito dos plugins do WordPress...........................................................87 A licença GPLv2...................................................................................................... 88 Instalando plugins WordPress.................................................................................. 89 Criando seu próprio plugin..................................................................................... 90 Estrutura de arquivos do plugin de uma aplicação....................................................91 /adminpages/..................................................................................................... 92 /classes/............................................................................................................. 92 Sumário 7 /css/.................................................................................................................. 92 /js/94 /images/............................................................................................................ 95 /includes/.......................................................................................................... 95 /includes/lib/..................................................................................................... 95 /pages/.............................................................................................................. 95 /services/........................................................................................................... 97 /scheduled/....................................................................................................... 97 /schoolpress.php................................................................................................ 97 Add-ons para plugins existentes............................................................................... 98 Casos de uso e exemplos......................................................................................... 98 O laço do WordPress.......................................................................................... 99 Variáveis globais do WordPress..........................................................................100 Hooks de ações..................................................................................................111 Filtros............................................................................................................... 112 Plugins gratuitos.................................................................................................... 113 All in One SEO Pack......................................................................................... 113 BadgeOS.......................................................................................................... 114 Custom Post Type UI........................................................................................ 114 Posts 2 Posts..................................................................................................... 114 Members.......................................................................................................... 115 W3 Total Cache................................................................................................ 116 Plugins premium................................................................................................... 116 Gravity Forms.................................................................................................. 116 Backup Buddy.................................................................................................. 116 WP All Import.................................................................................................. 117 Plugins de comunidade.......................................................................................... 117 BuddyPress....................................................................................................... 117 Tabelas do banco de dados................................................................................ 119 Capítulo 4 ■ Temas................................................................................................................131 Temas versus plugins.............................................................................................. 131 Quando desenvolver aplicações......................................................................... 131 Quando desenvolver plugins.............................................................................133 Quando desenvolver temas................................................................................133 A hierarquia de templates.......................................................................................134 Templates de página...............................................................................................136 Exemplo de template de página.........................................................................136 Usando hooks para copiar templates..................................................................139 Quando usar um template de tema.................................................................... 141 Funções WP relacionadas a temas........................................................................... 141 Usando locate_template em seus plugins...........................................................143 Style.css.................................................................................................................144 8 Criando Aplicações Web com WordPress Atribuindo versões aos arquivos CSS de seu tema............................................... 145 Functions.php........................................................................................................ 147 Temas e tipos de post personalizados...................................................................... 147 Frameworks populares de temas ............................................................................148 Frameworks de temas para o WordPress.............................................................148 Frameworks de temas não exclusivos do WordPress............................................150 Criando um tema-filho para o StartBox..................................................................150 Incluindo o Bootstrap no tema de sua aplicação...................................................... 151 Menus...................................................................................................................153 Menus de navegação.........................................................................................153 Menus dinâmicos.............................................................................................154 Design responsivo..................................................................................................155 Detecção de dispositivo e de display no CSS.......................................................155 Detecção de dispositivos e de recursos no JavaScript...........................................157 Detecção de dispositivos no PHP.......................................................................160 Observação final sobre detecção de navegadores.................................................164 Atribuindo versões aos arquivos CSS e JS................................................................165 Capítulo 5 ■ Tipos de post personalizados, metadados de post e taxonomias...........................167 Tipos de post default e tipos de post personalizados................................................167 Página (page)....................................................................................................167 Post..................................................................................................................167 Anexo (attachment)..........................................................................................168 Revisões (revisions)...........................................................................................168 Item de menu de navegação (nav menu item).....................................................168 Definindo e registrando tipos de post personalizados..............................................168 register_post_type( $post_type, $args );.............................................................169 O que é uma taxonomia e como devo usá-la?..........................................................179 Taxonomias versus metadados de post...............................................................179 Criando taxonomias personalizadas..................................................................182 register_taxonomy_for_object_type( $taxonomy, $object_type ).........................186 Usando tipos de post personalizados e taxonomias em seus temas e plugins............187 Os arquivos de template Archive e Single do tema..............................................187 Os bons e velhos WP_Query e get_posts().........................................................188 Metadados com CPTs.............................................................................................192 add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args )... 192 Classes wrapper personalizadas para CPTs..............................................................195 Estender WP_Post versus encapsulá-la...............................................................198 Por que usar classes wrapper?............................................................................198 Mantenha seus CPTs e as taxonomias juntos......................................................199 Mantenha tudo na classe wrapper.................................................................... 200 As classes wrapper são mais legíveis...................................................................202 Sumário 9 Capítulo 6 ■ Usuários, funções e capacidades.........................................................................204 Obtendo dados de usuário.................................................................................... 205 Adicionar, atualizar e apagar usuários.................................................................... 208 Hooks e filtros........................................................................................................211 O que são funções e capacidades?........................................................................... 212 Verificando a função e as capacidades de um usuário......................................... 213 Criando funções e capacidades personalizadas................................................... 215 Estendendo a classe WP_User ............................................................................... 217 Adicionando campos para inscrição e perfil............................................................ 219 Personalizando a tabela de usuários no painel.........................................................225 Plugins..................................................................................................................227 Theme My Login..............................................................................................227 Hide Admin Bar from Non-Admins...................................................................227 Paid Memberships Pro..................................................................................... 228 PMPro Register Helper..................................................................................... 228 Members......................................................................................................... 229 Capítulo 7 ■ Outras APIs, objetos e funções auxiliares do WordPress........................................230 API Shortcode........................................................................................................230 Atributos de shortcode...................................................................................... 231 Shortcodes aninhados.......................................................................................232 Removendo shortcodes.....................................................................................233 Outras funções úteis relacionadas a shortcodes..................................................234 API Widgets...........................................................................................................234 Antes de adicionar o seu próprio widget............................................................235 Adicionando widgets........................................................................................236 Definindo uma área de widget...........................................................................240 Inserindo um widget fora de uma barra lateral dinâmica....................................243 API Dashboard Widgets........................................................................................ 244 Removendo widgets do painel.......................................................................... 244 Adicionando seu próprio widget de painel........................................................ 246 API Settings...........................................................................................................249 Você realmente precisa de uma página de configurações?....................................250 É possível usar um hook ou um filtro como alternativa?...................................... 251 Utilize padrões ao adicionar configurações.........................................................252 Ignore padrões ao adicionar configurações.........................................................253 API Rewrite...........................................................................................................254 Adicionando regras de reescrita.........................................................................255 Limpando as regras de reescrita........................................................................ 256 Outras funções de reescrita...............................................................................257 WP-Cron.............................................................................................................. 260 Adicionando intervalos de tempo personalizados............................................... 261 10 Criando Aplicações Web com WordPress Agendando eventos únicos................................................................................262 Disparando cron jobs a partir do servidor......................................................... 263 Usando somente crons do servidor................................................................... 264 WP Mail............................................................................................................... 265 Enviando emails mais elegantes com o WordPress............................................. 266 API File Header..................................................................................................... 268 Adicionando cabeçalhos aos seus próprios arquivos...........................................270 Adicionando novos cabeçalhos a plugins e temas............................................... 271 Capítulo 8 ■ Segurança no WordPress.....................................................................................273 Por que a segurança é importante...........................................................................273 Básico sobre a segurança........................................................................................274 Faça atualizações com frequência......................................................................274 Não utilize o nome de usuário “admin”..............................................................274 Utilize uma senha robusta.................................................................................275 Exemplos de senhas ruins.................................................................................275 Exemplos de senhas boas..................................................................................276 Tornando sua instalação do WordPress mais robusta...............................................276 Não permita que os administradores editem plugins ou temas...........................276 Altere o prefixo default das tabelas do banco de dados...................................... 277 Mova wp-config.php para outro local................................................................278 Oculte mensagens de erro de login....................................................................279 Oculte a versão de seu WordPress......................................................................279 Não permita logins por meio de wp-login.php...................................................279 Adicione regras .htaccess personalizadas para bloquear wp-admin..................... 281 Faça backup de tudo!............................................................................................ 282 Scan scan scan!..................................................................................................... 282 Plugins de segurança úteis..................................................................................... 283 Plugins para bloquear spams............................................................................ 283 Plugins para backup........................................................................................ 283 Plugins scanners.............................................................................................. 284 Plugins para proteção de login e de senha......................................................... 285 Implementando códigos seguros............................................................................ 286 Verificação das capacidades dos usuários.......................................................... 286 Instruções SQL personalizadas......................................................................... 287 Validação de dados, sanitização e escaping........................................................ 288 Nonces............................................................................................................ 292 Capítulo 9 ■ JavaScript, jQuery e AJAX....................................................................................299 O que é AJAX?...................................................................................................... 299 O que é JSON?..................................................................................................... 299 A jQuery e o WordPress......................................................................................... 300 Sumário 11 Enfileirando outras bibliotecas JavaScript......................................................... 300 Onde colocar o seu JavaScript personalizado.....................................................302 Chamadas AJAX com o WordPress e a jQuery........................................................ 303 Administrando várias solicitações AJAX................................................................ 308 API Heartbeat........................................................................................................ 310 Inicialização......................................................................................................311 JavaScript do lado do cliente..............................................................................311 PHP do lado do servidor................................................................................... 313 Inicialização..................................................................................................... 313 JavaScript do lado do cliente............................................................................. 314 PHP do lado do servidor................................................................................... 315 Limitações do WordPress para processamento assíncrono........................................ 316 Backbone.js........................................................................................................... 317 Capítulo 10 ■ XML-RPC...........................................................................................................320 wp.getUsersBlogs................................................................................................... 321 wp.getPosts............................................................................................................ 321 wp.getPost.............................................................................................................323 wp.newPost...........................................................................................................324 wp.editPost............................................................................................................325 wp.deletePost.........................................................................................................326 wp.getTerms..........................................................................................................327 wp.getTerm............................................................................................................328 wp.newTerm..........................................................................................................329 wp.editTerm...........................................................................................................329 wp.deleteTerm.......................................................................................................329 wp.getTaxonomies..................................................................................................330 wp.getTaxonomy....................................................................................................330 wp.getUsers........................................................................................................... 331 wp.getUser.............................................................................................................332 wp.getProfile..........................................................................................................333 wp.editProfile.........................................................................................................333 wp.getCommentCount...........................................................................................333 wp.getPageTemplates..............................................................................................334 wp.getOptions.......................................................................................................334 wp.setOptions........................................................................................................335 wp.getComment....................................................................................................336 wp.getComments...................................................................................................336 wp.deleteComment................................................................................................337 wp.editComment...................................................................................................337 wp.newComment..................................................................................................338 wp.getMediaLibrary...............................................................................................338 wp.getMediaItem...................................................................................................339 12 Criando Aplicações Web com WordPress wp.uploadFile....................................................................................................... 340 wp.getPostFormats................................................................................................. 341 wp.getPostType...................................................................................................... 341 wp.getPostTypes.....................................................................................................342 Capítulo 11 ■ Aplicativos móveis com o WordPress..................................................................343 Wrapper de aplicação.............................................................................................343 Aplicativos iOS......................................................................................................343 Cadastrando-se como um desenvolvedor Apple................................................. 344 Criando o seu aplicativo com o Xcode...............................................................345 Distribuição de aplicativos................................................................................349 Recursos para o iOS..........................................................................................350 Aplicativos para Android........................................................................................350 AndroidManifest.xml....................................................................................... 351 activity_main.xml.............................................................................................352 Criando um arquivo APK..................................................................................354 Disponibilizando o seu aplicativo no Google Play..............................................354 Recursos para o Android...................................................................................355 Estenda o seu aplicativo.........................................................................................355 AppPresser.............................................................................................................355 Casos de uso para aplicativos móveis......................................................................356 Capítulo 12 ■ Bibliotecas PHP, APIs externas e web services....................................................358 Imagick.................................................................................................................359 MaxMind GeoIP....................................................................................................359 API JavaScript v3 do Google Maps..........................................................................362 Directions.........................................................................................................362 Distance Matrix............................................................................................... 363 Elevation......................................................................................................... 363 Geocoding....................................................................................................... 363 Street View Service........................................................................................... 363 Aplicação prática............................................................................................. 363 Google Translate....................................................................................................367 Google+............................................................................................................... 368 People (Pessoas)............................................................................................... 368 Activities (atividades)....................................................................................... 368 Comments (comentários)................................................................................. 368 Moments (momentos)...................................................................................... 369 API Product Advertising da Amazon...................................................................... 369 Parâmetros para a solicitação............................................................................370 Operações........................................................................................................370 Grupos de resposta...........................................................................................372 Sumário 13 API REST v1.1 do Twitter........................................................................................373 Criando a sua aplicação no Twitter.com.............................................................375 Tirando proveito de uma biblioteca PHP............................................................375 Facebook...............................................................................................................377 Imagens............................................................................................................377 Pesquisa...........................................................................................................378 Permissões........................................................................................................378 Criando uma aplicação.....................................................................................379 Tirando proveito do que existe por aí.................................................................379 Twilio................................................................................................................... 380 Microsoft Sharepoint............................................................................................ 380 Deixamos alguns web services de lado................................................................... 384 Capítulo 13 ■ Criando redes WordPress Multisite....................................................................385 Por que multisite?................................................................................................. 385 Criando uma rede Multisite................................................................................... 386 Administrando uma rede Multisite........................................................................ 388 Dashboard (Painel).......................................................................................... 388 Sites................................................................................................................ 389 Users (Usuários).............................................................................................. 389 Themes (Temas).............................................................................................. 390 Plugins............................................................................................................ 390 Configurações.................................................................................................. 391 Updates (Atualizações)......................................................................................392 Estrutura do banco de dados Multisite...................................................................392 Tabelas válidas para toda a rede.........................................................................392 Tabelas para sites individuais.............................................................................395 Tabelas compartilhadas entre sites.....................................................................395 Plugins Multisite................................................................................................... 396 WordPress MU Domain Mapping.................................................................... 396 Blog Copier..................................................................................................... 396 More Privacy Options.......................................................................................397 Multisite Global Search.....................................................................................397 Multisite Robots.txt Manager............................................................................397 Funcionalidades básicas de Multisite......................................................................397 $blog_id...........................................................................................................397 is_multisite()....................................................................................................398 get_current_blog_id().......................................................................................398 switch_to_blog( $new_blog )............................................................................399 restore_current_blog()......................................................................................399 get_blog_details( $fields = null, $get_all = true )............................................... 400 update_blog_details( $blog_id, $details = array() )............................................ 401 get_blog_status( $id, $pref )............................................................................. 402 14 Criando Aplicações Web com WordPress update_blog_status( $blog_id, $pref, $value )................................................... 402 get_blog_option( $id, $option, $default = false )............................................... 403 update_blog_option( $id, $option, $value )....................................................... 403 delete_blog_option( $id, $option ).................................................................... 404 get_blog_post( $blog_id, $post_id )................................................................. 404 add_user_to_blog( $blog_id, $user_id, $role ).................................................. 405 create_empty_blog( $domain, $path, $weblog_title, $site_id = 1 )...................... 405 Funções que não mencionamos........................................................................ 406 Capítulo 14 ■ Localização de aplicações WordPress.................................................................407 É mesmo necessário fazer a localização de sua aplicação?........................................ 407 Como é feita a localização no WordPress................................................................ 408 Definindo a sua localidade no WordPress............................................................... 409 Preparando suas strings com as funções de tradução.............................................. 409 _ _($text, $domain = “default”)......................................................................... 409 _e($text, $domain = “default”).......................................................................... 410 _x($text, $context, $domain = “default”)........................................................... 410 _ex($title, $context, $domain = “default”)...........................................................411 Escapando e traduzindo ao mesmo tempo..........................................................411 Criando e carregando arquivos de tradução............................................................ 412 Nossa estrutura de arquivos para efetuar a localização....................................... 413 Gerando um arquivo .pot.................................................................................. 414 Criando um arquivo .po.................................................................................... 416 Criando um arquivo .mo................................................................................... 416 Carregando o textdomain.................................................................................. 416 Localizando recursos que não são strings................................................................ 418 Capítulo 15 ■ E-commerce.....................................................................................................421 Selecionando um plugin......................................................................................... 421 Plugins para carrinho de compras..................................................................... 421 Plugins para adesão de membros.......................................................................423 Downloads digitais...........................................................................................424 Gateways de pagamento.........................................................................................424 Contas de comerciante...........................................................................................425 Certificados SSL e HTTPS......................................................................................427 Instalando um certificado SSL em seu servidor...................................................427 SSL com o Paid Memberships Pro..................................................................... 429 O SSL com o Jigoshop...................................................................................... 430 Login e painel de administração do WordPress por meio de SSL........................ 430 Frontend do WordPress por meio de SSL............................................................ 431 SSL em páginas selecionadas.............................................................................433 Evitando erros de SSL com a “Nuclear Option”...................................................437 Sumário 15 Criando um SaaS (Software as a service) com o Paid Memberships Pro....................439 O modelo de Software como serviço.......................................................................439 Passo 0: Determine o modo pelo qual você deseja cobrar pela sua aplicação....... 440 Passo 1: Instale e ative o Paid Memberships Pro................................................ 440 Passo 2: Configure o nível.................................................................................441 Passo 3: Crie as páginas................................................................................... 442 Passo 4: Configurações de pagamento.............................................................. 443 Passo 5: Configurações de email....................................................................... 445 Passo 6: Configurações avançadas.................................................................... 446 Passo 7: Efetue o bloqueio de páginas.............................................................. 446 Bloquear uma parte de uma página por meio de shortcode................................ 448 Passo 8: Personalize o Paid Memberships Pro................................................... 449 Capítulo16 ■ Otimizar e escalar com o WordPress...................................................................459 Termos..................................................................................................................459 Origem versus borda..............................................................................................461 Testes.................................................................................................................... 462 O que deve ser testado..................................................................................... 462 Barra de depuração do Chrome........................................................................ 465 Apache Bench...................................................................................................467 Siege................................................................................................................. 474 Blitz.io.............................................................................................................475 W3 Total Cache.....................................................................................................476 Configurações de cache de páginas....................................................................477 Minificar..........................................................................................................479 Caching do banco de dados............................................................................. 480 Cache de objetos.............................................................................................. 480 CDNs...............................................................................................................481 Compressão gzip..............................................................................................481 Hosting................................................................................................................ 482 Hosts específicos para o WordPress................................................................... 482 Instalando o seu próprio servidor..................................................................... 483 Caching seletivo.................................................................................................... 498 A API Transient................................................................................................ 499 Transientes em Multisite...................................................................................502 Usando JavaScript para melhorar o desempenho.................................................... 503 Tabelas personalizadas.......................................................................................... 505 Ignorando o WordPress..........................................................................................507