Wordpress

wp user update: resetar a senha do admin do WordPress pelo terminal

Você clicou em perdeu a senha, o WordPress disse que enviou o link e o e-mail nunca chega, porque o servidor manda mail pela função nativa do PHP e o provedor descarta. Se você tem SSH na máquina, dá pra trocar a senha do administrador em dois comandos e voltar pro painel agora.

Descubra o ID certo antes de trocar

Em site antigo quase sempre existe mais de um administrador, e o ID 1 pode ser um usuário de migração que ninguém usa. Liste primeiro:

cd /var/www/seusite/html

sudo -u www-data wp user list --role=administrator --fields=ID,user_login,user_email

sudo -u www-data wp user update 7 --user_pass='TrocaEssaSenhaDepois2026' --skip-email

Esse caminho é mais seguro que um UPDATE na tabela wp_users porque o WP-CLI passa pelas funções internas do WordPress: o hash sai do próprio core, que desde a 6.8 usa bcrypt, e a chave de ativação pendente daquele pedido de recuperação é zerada de quebra. Senha em texto puro gravada na mão no banco simplesmente não loga.

Não deixe a senha no histórico do shell

Do jeito acima a senha fica salva no arquivo de histórico do seu usuário. Gerar numa variável tira ela do histórico, mas o valor já expandido continua visível pra quem der um ps no segundo em que o comando roda:

NOVA=$(openssl rand -base64 18)
sudo -u www-data wp user update 7 --user_pass="$NOVA" --skip-email
echo "senha: $NOVA"

Em máquina compartilhada eu nem passo a senha na linha de comando: sudo -u www-data wp user update 7 --skip-email --prompt=user_pass faz o WP-CLI pedir o valor no terminal, e aí ele não entra no histórico nem na lista de processos.

Logou de volta? Entre em Usuários, apague os administradores que ninguém reconhece e confirme o e-mail cadastrado no seu. Conta de admin esquecida com senha fraca é a porta de entrada mais comum que eu encontro em faxina de site invadido.

Post Recentes

preg_replace_callback no PHP: substituir cada match com uma função

Quando o valor novo depende do que a regex achou, preg_replace não resolve. Exemplo real aplicando 10% de desconto em…

15 horas atrás

Cron do Magento 2 não roda: status missed e pending no cron_schedule

Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…

2 dias atrás

Gerar slug de URL em PHP: acento, espaço e símbolo fora do endereço

Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.

2 dias atrás

Log de consentimento LGPD: a tabela MySQL que guarda a prova do aceite

O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…

3 dias atrás

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

4 dias atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

4 dias atrás