Módulo 1 · 1.2
Como funciona o WooCommerce
Módulo 1: Antes de começar · Tempo de leitura: 10 minutos
Objetivo de aprendizagem: Depois desta lição, saberá explicar como o WooCommerce funciona no WordPress e onde ficam os produtos, as encomendas, o carrinho e as tarefas agendadas.
Conceitos-chave: tipo de produto, tipo de conteúdo product, encomendas (HPOS), páginas da loja, sessão e carrinho, Store API, REST API, Action Scheduler, e-mails transacionais, extensões
Um plugin que transforma o seu site numa loja
No curso de WordPress (lições 1.2 e 1.3) viu como nasce uma página: o servidor web entrega o pedido ao PHP, o PHP carrega o WordPress, os plugins e o tema, obtém dados da base de dados e transforma-os em HTML. O WooCommerce integra-se nesse processo como um plugin de grande dimensão. Traz consigo quatro elementos:
- Dados: produtos, encomendas, clientes, taxas de imposto, zonas de envio.
- Páginas: a loja, o carrinho, a finalização da compra e A minha conta.
- Processos: um carrinho por visitante, pagamentos através de um fornecedor de pagamentos, e-mails, atualização do stock, tarefas agendadas.
- Pontos de acesso para programas: a Store API e a REST API.
Quem sabe onde se encontram estes componentes consegue, mais tarde, encontrar um erro muito mais depressa. Por isso, vamos analisá-los agora um a um.
Produtos: um tipo de conteúdo próprio
O WordPress conhece tipos de conteúdo: as páginas e os artigos são dois deles (curso de WordPress, lição 4.2). O WooCommerce acrescenta o tipo de conteúdo product. Um produto fica, portanto, tal como uma página, na tabela de artigos, com os seus dados adicionais (preço, SKU, stock, peso) como metadados. As categorias e as etiquetas dos produtos são taxonomias próprias, separadas das do seu blogue.
Cada produto tem um tipo de produto. De base, são eles: simples, agrupado, externo (uma ligação para outra loja) e variável. Pode ainda ativar as opções virtual (nada para enviar) e descarregável (um ficheiro após o pagamento). Um produto variável tem variações, como um bule em três cores; cada variação é um item próprio com preço e stock próprios. O módulo 3 aprofunda este tema.
Encomendas: tabelas próprias (HPOS)
Antigamente, o WooCommerce também guardava as encomendas como artigos. Nas lojas com muito movimento isso tornava-se lento, porque as encomendas e os artigos do blogue partilhavam a mesma tabela de grandes dimensões. Por isso surgiu o HPOS (High-Performance Order Storage): encomendas em tabelas próprias, como wc_orders, wc_order_addresses e wc_orders_meta (precedidas do prefixo de tabelas do seu site). Desde o WooCommerce 8.2 (outubro de 2023), o HPOS está ativo em todas as novas instalações. Uma loja mais antiga mantém o armazenamento antigo até que faça a mudança em WooCommerce > Configurações > Avançado > Funcionalidades.
Porque é importante saber isto? Por três razões:
- Cópias de segurança: as encomendas não estão nos seus ficheiros, mas na base de dados. Para uma loja, uma cópia de segurança sem base de dados não tem qualquer valor (lição 6.2).
- Extensões: uma extensão mais antiga que ainda lê as encomendas como artigos não funciona corretamente com o HPOS. O WooCommerce mostra um aviso junto do plugin se este não for compatível.
- Repor: se repuser uma cópia de segurança de ontem, as encomendas de hoje desaparecem. Numa loja isso é muito mais grave do que num blogue (lição 6.2).
O carrinho: diferente para cada visitante
Uma página normal é igual para todos os visitantes. O carrinho não. Assim que um visitante coloca algo no carrinho, o WooCommerce inicia uma sessão: um cookie (wp_woocommerce_session_ seguido de um código) no navegador e uma linha numa tabela de sessões na base de dados. Desta forma, no pedido seguinte, a loja sabe que carrinho pertence a este visitante.
Duas consequências que irá reencontrar mais tarde:
- O carrinho, a finalização da compra e A minha conta nunca podem ficar numa cache de páginas; caso contrário, um visitante vê o carrinho de outro. O próprio WooCommerce envia nessas páginas cabeçalhos HTTP que proíbem a cache (lição 6.4).
- Uma loja que inicia uma sessão para cada visitante, mesmo sem carrinho, torna inútil a cache de páginas de todo o site. É um erro frequente de temas e extensões.
As páginas da loja e os blocos
Durante a instalação, o WooCommerce cria quatro páginas: Loja, Carrinho, Finalizar compras e A minha conta. Desde a versão 8.3 (novembro de 2023), as novas instalações utilizam blocos no carrinho e na finalização da compra; as lojas mais antigas utilizam frequentemente ainda shortcodes. Ambos funcionam. A diferença é importante para as extensões: uma extensão que acrescenta algo à finalização da compra tem de suportar a variante que utiliza. A lição 2.2 mostra como verificar isso.
Dois pontos de acesso para programas: Store API e REST API
O WooCommerce tem dois pontos de acesso programáveis, e a diferença entre eles é importante para a segurança:
| Store API | REST API | |
|---|---|---|
| Endereço | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Para quem | A própria loja (os blocos no navegador) e outras montras | Integrações: contabilidade, stock, aplicações |
| É necessária uma chave? | Não, é pública: qualquer pessoa pode ler produtos e preços | Sim, uma Chave da API com permissões de leitura ou de escrita |
| O que contém | Produtos, preços, estado do stock, o carrinho do visitante atual | Também encomendas, clientes, relatórios |
O facto de a Store API ser pública não é uma fuga de dados: é exatamente o que qualquer visitante vê na loja, apenas num formato que os programas conseguem ler. Experimente com a sua própria loja: abra https://shop.example.com/wp-json/wc/store/v1/products no seu navegador (com o seu próprio endereço) e verá os seus produtos em JSON. A REST API, pelo contrário, deve estar fechada sem chave. A lição 2.4 verifica ambas.
Nos bastidores: Action Scheduler e e-mails
Grande parte do trabalho de uma loja não acontece enquanto o cliente espera, mas mais tarde. Para isso, o WooCommerce utiliza o Action Scheduler: uma fila de tarefas agendadas, como cancelar uma encomenda não paga após o tempo definido, enviar webhooks ou atualizar relatórios. Pode ver a fila em WooCommerce > Estado > Acções agendadas. Estas tarefas correm sobre o WP-Cron, que só é executado quando há visitantes. Numa loja com pouco movimento, algum trabalho pode ficar por fazer; a lição 7.3 mostra como um cron verdadeiro resolve isso.
Além disso, o WooCommerce envia e-mails transacionais: um e-mail para si quando há uma nova encomenda e e-mails para o cliente na receção, no envio, no reembolso ou na criação de uma nova conta. Se não chegarem ao destino, o cliente pensa que algo correu mal. A lição 6.1 trata da entregabilidade.
Na prática: é assim no WooCommerce
Na administração do WordPress do Theehuis Example surgem, após a instalação, três novos menus: WooCommerce (encomendas, clientes, configurações, estado), Produtos e Dados analíticos (nas versões recentes, por vezes dentro de WooCommerce). Em WooCommerce > Estado encontra o ambiente do servidor, as tabelas da base de dados, as ações agendadas e os registos. Vai precisar frequentemente desse ecrã. Os passos são iguais em qualquer fornecedor de alojamento, porque fazem parte do próprio WordPress.
Resumo
- O WooCommerce traz dados, páginas, processos e dois pontos de acesso programáveis.
- Os produtos são um tipo de conteúdo próprio; nas lojas novas, as encomendas ficam em tabelas próprias (HPOS, predefinido desde a versão 8.2).
- O carrinho funciona com uma sessão por visitante; por isso, o carrinho, a finalização da compra e A minha conta não podem ficar em cache.
- A Store API é pública e mostra o que qualquer visitante vê; a REST API deve estar fechada sem chave.
- As tarefas agendadas correm através do Action Scheduler e do WP-Cron; os e-mails fazem parte do processo de encomenda.
Questionário
Exercício
Exercício A1.2: Este site funciona com WooCommerce? Introduza um domínio, escolha sim ou não e indique que prova encontrou (por exemplo, "generator" ou "wc/store/v1"). O programa obtém a página inicial, lê o índice REST (/wp-json/, apenas a lista de namespaces) e consulta /wp-json/wc/store/v1/products?per_page=1. Reconhece o WooCommerce por uma meta generator com WooCommerce, pelo namespace wc/store/v1 no índice REST, por uma Store API em funcionamento, por ficheiros de /wp-content/plugins/woocommerce/ ou pela classe do body woocommerce. Verde: a sua escolha está correta e a sua prova aparece nos cabeçalhos HTTP, no HTML, no índice REST ou na resposta da Store API; vê então também o número de produtos e a moeda. Laranja: a sua escolha está correta, mas não encontramos a sua prova. Vermelho: a sua escolha não está correta. Experimente primeiro na sua própria loja e depois numa loja que conheça. Nada é colocado num carrinho e nada é enviado.
Para saber mais
Quando são indicados passos num painel, estes aplicam-se ao WebOké; noutros fornecedores, o funcionamento é semelhante.
- Curso gratuito de WordPress 1.2: Debaixo do capô: servidor, PHP e base de dados
- Curso gratuito de WordPress 1.3: Ficheiros, wp-config e a base de dados
- Curso gratuito de WordPress 4.2: Páginas, artigos, categorias e tags
- High-Performance Order Storage (developer.woocommerce.com, em inglês): https://developer.woocommerce.com/docs/features/orders/high-performance-order-storage/
- Store API (developer.woocommerce.com, em inglês): https://developer.woocommerce.com/docs/apis/store-api/
- Action Scheduler (em inglês): https://actionscheduler.org/
