gustavoo-portfolio-core refuses to activate without fluentform, fluent-crm and fluent-smtp, but those were gitignored and not installed by the setup: any fresh clone ended with the core plugin inactive and the seeder skipped. They are now part of the default WP_EXTRA_PLUGINS (verified slugs on WordPress.org), with .env.example, compose default, README and .gitignore updated to match.
191 lines
7.7 KiB
Markdown
191 lines
7.7 KiB
Markdown
# Gustavo Portfolio — Tema WordPress
|
|
|
|
Tema WordPress clássico para o portfólio e blog de **Gustavo Oliveira** — [gustavoo.me](https://gustavoo.me)
|
|
|
|
## Screenshot
|
|
|
|

|
|
|
|
## Sobre
|
|
|
|
Tema WordPress clássico desenvolvido para o portfólio pessoal e blog de Gustavo Oliveira, desenvolvedor Full Stack Sênior. O tema foi construído com foco em performance, acessibilidade e experiência do usuário, utilizando as melhores práticas do WordPress moderno.
|
|
|
|
## Características
|
|
|
|
- **Tema Clássico** — Template hierarchy tradicional do WordPress
|
|
- **Theme.json** — Configuração completa de estilos via theme.json (cores, tipografia, espaçamento, bordas)
|
|
- **Blocos Nativos** — Suporte completo a blocos do Gutenberg
|
|
- **Fluent Forms + FluentCRM** — Integração nativa para formulários e newsletter
|
|
- **Portfólio de Projetos** — CPT customizado para exibição de projetos
|
|
- **Newsletter Widget** — Widget personalizado para FluentCRM
|
|
- **SEO Ready** — Estrutura semântica e meta tags otimizadas
|
|
- **Performance** — Assets otimizados, fontes variáveis (Inter Variable), lazy loading nativo
|
|
|
|
## Stack
|
|
|
|
- **WordPress** 6.5+
|
|
- **PHP** 8.1+
|
|
- **Theme.json** v3
|
|
- **Inter Variable Font** (local, self-hosted)
|
|
- **Fluent Forms** + **FluentCRM** (integração via plugin complementar)
|
|
- **Docker Compose** para desenvolvimento local
|
|
|
|
## Estrutura do Tema
|
|
|
|
```
|
|
gustavoo-portfolio/
|
|
├── assets/
|
|
│ └── fonts/ # Inter Variable Font (woff2)
|
|
├── inc/
|
|
│ ├── customizer.php # Personalizador do tema
|
|
│ ├── defaults.php # Configurações padrão (theme.json fallback)
|
|
│ ├── enqueue.php # Assets e estilos
|
|
│ ├── forms.php # Integração Fluent Forms
|
|
│ ├── setup.php # Configuração do tema
|
|
│ ├── template-tags.php # Template tags auxiliares
|
|
│ └── widgets.php # Widget Newsletter (FluentCRM)
|
|
├── template-parts/ # Partes de template reutilizáveis
|
|
├── 404.php
|
|
├── archive.php
|
|
├── category.php
|
|
├── comments.php
|
|
├── footer.php
|
|
├── front-page.php # Página inicial customizada
|
|
├── functions.php # Bootstrap do tema
|
|
├── header.php
|
|
├── home.php
|
|
├── index.php
|
|
├── page.php
|
|
├── search.php
|
|
├── searchform.php
|
|
├── sidebar.php
|
|
├── single.php
|
|
├── screenshot.png # Screenshot do tema (theme.png)
|
|
├── style.css # Stylesheet principal (metadados do tema)
|
|
└── theme.json # Configuração global de estilos
|
|
```
|
|
|
|
## Plugin Complementar
|
|
|
|
O tema funciona em conjunto com o plugin **Gustavo Portfolio Core** (`wp-content/plugins/gustavoo-portfolio-core`), que provê:
|
|
|
|
- **CPT Projetos** — Post type customizado para portfólio
|
|
- **Configurações Globais** — Opções de hero, sobre, projetos, blog, contato, newsletter e redes sociais
|
|
- **Seeder** — Criação automática de páginas, formulários Fluent Forms e feeds FluentCRM
|
|
- **Widget Newsletter** — Widget para exibir formulário de newsletter no sidebar
|
|
|
|
## Desenvolvimento Local
|
|
|
|
### Pré-requisitos
|
|
|
|
O tema e plugin dependem dos seguintes plugins WordPress (instalados e ativados):
|
|
|
|
- **Fluent Forms** — Formulários de contato e newsletter
|
|
- **FluentCRM** — Automação de marketing e newsletter
|
|
|
|
```bash
|
|
# Criar o arquivo de variáveis de ambiente (obrigatório)
|
|
cp .env.example .env
|
|
# Edite o .env com suas credenciais (senhas do banco, porta, etc.)
|
|
|
|
# Subir ambiente Docker (instala e configura tudo automaticamente)
|
|
docker compose up -d
|
|
|
|
# Acompanhar a instalação
|
|
docker compose logs -f wpcli
|
|
|
|
# Acessar WordPress
|
|
# http://localhost:8080
|
|
# Usuário: admin | Senha: admin (definido no .env)
|
|
|
|
# Instalar dependências (plugins obrigatórios)
|
|
# 1. Acesse http://localhost:8080/wp-admin
|
|
# 2. Plugins → Adicionar novo → Busque e instale:
|
|
# - Fluent Forms
|
|
# - FluentCRM
|
|
# 3. Ative ambos os plugins
|
|
|
|
# Logs
|
|
docker compose logs -f wordpress
|
|
```
|
|
|
|
### O que acontece a cada `docker compose up`
|
|
|
|
O serviço `wpcli` roda o `docker/wp-init.sh` e detecta o estado do banco:
|
|
|
|
**Primeira execução (banco vazio) — instalação**
|
|
1. `wp core install` com URL/título/admin definidos no `.env`
|
|
2. Pacote de idioma `pt_BR`
|
|
3. Instala do WordPress.org os plugins de `WP_EXTRA_PLUGINS` (Post Views Counter, Rank Math SEO, Site Kit, Fluent Forms, FluentCRM, FluentSMTP) — só se faltarem
|
|
4. Ativa **todos** os plugins de `wp-content/plugins/` e remove os que o WordPress traz (`akismet`, `hello`)
|
|
5. Redis: constantes no `wp-config.php`, plugin, drop-in `object-cache.php` e verificação de conexão
|
|
6. Configura o Post Views Counter: conta **posts e páginas**, posição **Manual only**
|
|
7. Ativa o tema `gustavoo-portfolio` e remove os temas padrão
|
|
8. Executa o seeder do plugin (páginas, formulários, feeds, permalinks, avatar)
|
|
|
|
Rank Math SEO e Site Kit são apenas instalados e ativados: o wizard e a conexão com o Google são feitos manualmente no painel.
|
|
|
|
**Execuções seguintes (site já instalado) — atualização**
|
|
1. Nada é reinstalado e nenhum dado é apagado
|
|
2. Atualiza o **core** e os **plugins ativos** que tiverem versão nova
|
|
3. Ativa plugins novos adicionados à pasta `wp-content/plugins/`
|
|
4. Reaplica só o que estiver faltando (idioma, Redis, tema, seeder idempotente)
|
|
|
|
> A configuração do Post Views Counter roda **uma única vez**, na instalação. Se você mudar a posição no painel, ela não é sobrescrita nos próximos boots.
|
|
|
|
O seeder também aplica, apenas enquanto os valores ainda forem os de instalação nova:
|
|
|
|
| Ajuste | Valor aplicado |
|
|
|---|---|
|
|
| Links permanentes | **Dia e nome** — `/ano/mês/dia/slug/` |
|
|
| Avatar padrão | **Iniciais** |
|
|
|
|
Depois de criar permalinks, o `.htaccess` do Apache é regravado na hora — sem isso as URLs novas dariam 404. Se você já tiver escolhido outro permalink ou avatar, sua escolha é mantida.
|
|
|
|
Tudo o que é do usuário fica em **volumes**, não no container:
|
|
|
|
| Volume | Conteúdo |
|
|
|---|---|
|
|
| `db_data` | banco MariaDB — posts, páginas, usuários, opções, formulários |
|
|
| `wordpress_data` | core, uploads, plugins e temas instalados |
|
|
| `redis_data` | cache de objetos |
|
|
|
|
`docker compose down` (sem `-v`) preserva tudo; só `down -v` recria do zero. Para pular atualizações numa reinicialização, use `WP_SKIP_UPDATES=1` no `.env`.
|
|
|
|
### Senhas
|
|
|
|
A senha do banco é gravada **dentro do volume `db_data` na primeira instalação**. Trocar `WORDPRESS_DB_PASSWORD` ou `MARIADB_ROOT_PASSWORD` no `.env` depois disso **não** atualiza o banco — o WordPress perde a conexão (`Error establishing a database connection`) e o setup aborta com erro em vez de reinstalar por cima.
|
|
|
|
Para voltar ao normal, devolva a senha original no `.env` e reinicie (`docker compose up -d`).
|
|
|
|
Para trocar a senha de verdade, altere-a nos dois lugares, nessa ordem:
|
|
|
|
```sh
|
|
# 1. No banco em execução (troque NOVA_SENHA pela senha nova):
|
|
docker compose exec db mariadb -u root -p"$MARIADB_ROOT_PASSWORD" \
|
|
-e "ALTER USER 'wordpress'@'%' IDENTIFIED BY 'NOVA_SENHA'; FLUSH PRIVILEGES;"
|
|
|
|
# 2. No .env:
|
|
WORDPRESS_DB_PASSWORD=NOVA_SENHA
|
|
|
|
# 3. Reinicie:
|
|
docker compose up -d
|
|
```
|
|
|
|
## Deploy
|
|
|
|
O tema está preparado para deploy em ambientes WordPress padrão (VPS, shared hosting, WP Engine, Kinsta, etc.).
|
|
|
|
1. Faça o build dos assets se necessário
|
|
2. Faça deploy da pasta `wp-content/themes/gustavoo-portfolio/`
|
|
3. Ative o tema no painel WordPress
|
|
4. Ative o plugin **Gustavo Portfolio Core**
|
|
5. Execute o seeder (Configurações → Portfólio → "Executar Seeder") para criar páginas e formulários padrão
|
|
|
|
## Licença
|
|
|
|
GNU General Public License v2 ou posterior — mesmo licença do WordPress.
|
|
|
|
---
|
|
|
|
**Desenvolvido por [Gustavo Oliveira](https://gustavoo.me)** — Desenvolvedor Full Stack Sênior |