# Sites WordPress

Além dos hotsites estáticos, o rapadura cria **sites WordPress** dentro do
multisite de `rapadura.net`. Serve para quem prefere editar conteúdo no
WordPress, ou para o agente montar o site pela API REST e pelo `wp-cli`.

Cada site é um **subsite** `nome.rapadura.net`. Você é administrador só dele.
O tema e os plugins disponíveis são os que o administrador liberou na rede;
hoje o tema é o Twenty Twenty-Five.

Esta página é a referência. O passo a passo, com conteúdo, menu, rodapé,
imagens e co-organizador, está em [Receitas: WordPress](receitas-wordpress.md).

## Criar

```sh
rapadura wp blueprints
rapadura wp create meetup-sobral --blueprint event --title "Meetup Sobral" --email voce@exemplo.com
```

- `--blueprint`: `blank` (só o site), `event` (início, programação,
  palestrantes, local, inscrições), `meetup`, `course`. As páginas vêm com
  texto de exemplo para o agente substituir. Fora o `blank`, o blueprint
  também monta o menu do topo e o rodapé e apaga a "Sample Page" e o
  "Hello world!" do WordPress.
- `--email`: necessário só na primeira vez. Vira o e-mail da sua conta no
  WordPress e fica guardado.

A resposta traz o endereço, o endereço do `wp-admin`, o seu login no
WordPress (derivado do GitHub, só letras e dígitos) e uma **senha de
aplicativo** mostrada uma única vez. Ela dá ao seu agente acesso à API REST
como você, **só nesse site**. Guarde como um token; se vazar, revogue no
perfil do WordPress.

## Editar pela API REST

Com o login e a senha de aplicativo, qualquer cliente HTTP funciona:

```sh
curl -u "seulogin:xxxx xxxx xxxx xxxx xxxx xxxx" \
  https://meetup-sobral.rapadura.net/wp-json/wp/v2/pages
```

Para criar páginas, enviar imagens, montar menus, mude o endpoint. A
documentação da API é a do WordPress mesmo. A senha só tem poder neste site:
nos outros sites da rede você não tem papel, e qualquer escrita é recusada.
Exemplos de upload e de páginas em [Receitas: WordPress](receitas-wordpress.md#8-imagens-do-seu-computador-api-rest).

## Editar pelo wp-cli

Tudo depois de `--` vai para o `wp-cli`, já preso ao seu site e ao seu
usuário. Não passe `--url`, `--path` nem `--user`; o gateway define.

```sh
rapadura wp meetup-sobral -- post list --post_type=page --format=json
rapadura wp meetup-sobral -- post create --post_type=page --post_title="Patrocínio" --post_status=publish
rapadura wp meetup-sobral -- post update 4 --post_content="$(cat programacao.html)"
rapadura wp meetup-sobral -- option update blogdescription "Comunidade PHP do Ceará"
rapadura wp meetup-sobral -- media import https://exemplo.com/banner.png --title="Banner"
rapadura wp meetup-sobral -- cache flush
```

O `wp-cli` roda **no servidor**. Por isso, arquivos do seu computador entram
como conteúdo (`--post_content="$(cat arquivo.html)"`) ou pela API REST,
nunca pelo nome: `post create arquivo.html` e `media import ./foto.jpg` são
recusados. E como o tema é de blocos, o menu do topo é um post
`wp_navigation`, não um menu do `wp menu`; veja
[Receitas: WordPress](receitas-wordpress.md#5-menu-do-topo).

A saída e o código de saída são os do `wp-cli`. Com `--json` você recebe
`stdout`, `stderr` e `exit_code` separados.

### O que é permitido

A regra geral: tudo que fica **dentro do seu site** é liberado; tudo que
alcança a rede, outros sites, outras contas ou arquivos do servidor é
recusado, com o motivo e uma dica.

| comando | liberado | observação |
|---|---|---|
| `post` | tudo, menos `edit` e `generate` | `create`/`update` não leem arquivo: use `--post_content` |
| `post-type`, `taxonomy`, `term`, `comment`, `menu`, `widget`, `sidebar`, `transient`, `rewrite`, `embed`, `help` | tudo | `term`/`comment generate` não |
| `export` | com `--stdout` | o WXR volta para você; gravar no servidor (`--dir`, `--filename_format`) é recusado |
| `option` | tudo | menos alterar `upload_path`, `upload_url_path` e `active_plugins` (use `plugin activate`) |
| `media` | tudo | `import` só de URLs http(s) |
| `search-replace` | sim | sempre só nas tabelas do seu site: o rapadura acrescenta `wp_N_*`; sem `--export=arquivo`/`--log=arquivo` |
| `cache` | `flush`, `type` | |
| `cron` | `event list`, `event run`, `schedule list`, `test` | agendar eventos novos não |
| `user` | `list`, `create`, `add-role`, `set-role`, `remove-role` | para a sua senha e credenciais: `rapadura wp password` / `rapadura wp credentials` |
| `plugin` | `list`, `get`, `status`, `activate`, `deactivate`... | instalar, atualizar ou remover não; `activate` só da lista abaixo |
| `theme` | `list`, `get`, `status`, `activate`, `mod`... | instalar, atualizar ou remover não |

`plugin activate` segue uma lista. O administrador pode definir os plugins
liberados no seu site; quando o site não tem lista própria, vale a lista da
rede. Plugin fora da lista é recusado com `wp_refused`, e a dica nomeia os
liberados; `--all` é recusado sempre que há lista. `rapadura sites show
<site>` mostra a lista do seu site.

Recusados sempre: `eval`, `eval-file`, `shell`, `db`, `config`, `core`,
`network`, `site`, `super-admin`, `import`, `language`, `maintenance-mode`,
`package`, `scaffold`, e as flags `--network`, `--all-tables`, `--blog_id`,
`--url`, `--path`, `--user`, `--require`, `--exec`, `--ssh`, `--http`.
Comando que não está na lista é recusado até o administrador liberar.

## Entrar no wp-admin

Sua conta no WordPress nasce sem senha conhecida. Para entrar pelo
navegador:

```sh
rapadura wp password meetup-sobral
```

Mostra uma senha nova uma única vez. Ela vale para o seu usuário em toda a
rede (você só tem acesso aos seus sites). Troque no perfil se quiser.

## Credenciais novas

```sh
rapadura wp credentials meetup-sobral
```

Gera outra senha de aplicativo. As antigas continuam valendo até você
revogar no perfil do WordPress.

A senha de aplicativo é da sua conta no WordPress, não de um site: ela vale
em todos os sites da rede onde você tem um papel (os seus sites) e não tem
permissão em nenhum outro.

## Tirar do ar

```sh
rapadura sites delete meetup-sobral --yes
```

O site é **arquivado**, não apagado: visitantes veem um aviso, o conteúdo
fica guardado e `rapadura sites restore meetup-sobral` traz tudo de volta.

## Limites e cuidados

- Sites WordPress não têm versões nem `rollback`; o histórico é o do próprio
  WordPress (revisões).
- O espaço de upload por site é o da rede (hoje 100 MB).
- Só o domínio `rapadura.net` por enquanto. Domínio próprio e
  `phpcomrapadura.org` para sites WordPress vêm depois, com aprovação.
- Toda chamada ao `wp-cli` fica no registro de auditoria com o comando
  completo. Não passe segredos em argumentos.
