
🚀 Login automático no WordPress em PHP: snippet para acesso de demonstração
O acesso de demonstração ao painel de administração do WordPress é uma abordagem padrão para vender plugins e temas. Um potencial comprador visita o site, vê o nome de utilizador e a palavra-passe, copia-os, vai ao wp-login.php, cola... São demasiados passos. Cada clique extra filtra uma parte da audiência.
O login automático via link resolve este problema de forma radical: um link e o utilizador já está no painel de administração, na conta pretendida. Sem copiar e colar, sem confusão com credenciais.
Abaixo encontra um snippet PHP pronto a usar que adiciona este mecanismo a qualquer site WordPress. Vinte linhas de código, a personalização demora 2 minutos. O snippet não depende do tema, não carrega dependências externas e é ativado como um plugin normal.
💡 Visão geral rápida:
- Adiciona um parâmetro de URL ao endereço de login (por exemplo
?autologin=demo) e owp_signon()autentica o utilizador na conta especificada com um redirecionamento para a secção pretendida - O snippet está formatado como um plugin WordPress separado: ative-o e funciona de imediato, desative-o e fica desligado, sem prender o tema
- A versão básica serve uma conta, a versão alargada suporta qualquer número de contas com diferentes perfis e pontos de destino
- Personalização para o seu projeto: altere três valores no código (utilizador, palavra-passe, chave de URL), carregue o plugin no site e obtenha o login via link
Como funciona o login automático: mecânica do wp_signon
O núcleo de toda a estrutura é a função wp_signon(). Ela recebe credenciais: nome de utilizador, palavra-passe e o sinalizador de lembrar, e depois autentica o utilizador exatamente como o formulário padrão no wp-login.php. A diferença é que a chamada acontece programaticamente, sem intervenção humana. O utilizador simplesmente segue o link e entra.
O hook after_setup_theme é executado antes de os cabeçalhos serem enviados, o que é crítico porque o wp_signon() define um cookie de autenticação, e os cookies têm de ser enviados antes de qualquer saída para o navegador. Se colocar a chamada no init ou num hook posterior, o login pode não funcionar. É exatamente por isso que o snippet está formatado como um plugin separado em vez de ser inserido no functions.php do tema: o plugin carrega nas fases muito iniciais do ciclo de vida do WordPress, garantindo que o hook será executado a tempo.

Aqui está o plugin mínimo funcional:
1 <?php 2 /* 3 Plugin Name: Auto Login 4 Plugin URI: https://techblog.sdstudio.top/ 5 Version: 1.0.0 6 Author: Harri Bell-Thomas 7 */ 8 9 function autologin() { 10 if ( $_GET['autologin'] !== 'demo' ) { 11 return; 12 } 13 14 $creds = array( 15 'user_login' => 'demo', 16 'user_password' => 'demo', 17 'remember' => true, 18 ); 19 20 $user = wp_signon( $creds, false ); 21 22 if ( ! is_wp_error( $user ) ) { 23 wp_redirect( admin_url() ); 24 exit; 25 } 26 } 27 add_action( 'after_setup_theme', 'autologin' );
Vamos analisá-lo linha a linha. A condição $_GET['autologin'] === 'demo' verifica se o parâmetro necessário foi passado no URL: wp-login.php?autologin=demo. O array $creds contém o nome de utilizador, a palavra-passe e o sinalizador "lembrar". O wp_signon() com o parâmetro false significa: não usar cookie seguro (adequado para desenvolvimento local e sites de staging sem HTTPS). Em caso de sucesso, wp_redirect( admin_url() ) redireciona o utilizador para o painel de administração. Em caso de erro (palavra-passe incorreta, utilizador inexistente), o WordPress mostra o formulário de login padrão sem revelar que houve uma tentativa de login automático.
Personalização para o seu projeto
Para adaptar o snippet, basta alterar três valores: o parâmetro de URL, o nome de utilizador e a palavra-passe. No bloco seguinte, eles foram movidos para o início da função por conveniência:
1 function autologin() { 2 $param = 'autologin'; 3 $user = 'dummy'; 4 $pass = 'pa55word'; 5 6 if ( $_GET[ $param ] !== $user ) { 7 return; 8 } 9 10 $creds = array( 11 'user_login' => $user, 12 'user_password' => $pass, 13 'remember' => true, 14 ); 15 16 $login = wp_signon( $creds, false ); 17 18 if ( ! is_wp_error( $login ) ) { 19 wp_redirect( admin_url() ); 20 exit; 21 } 22 }
Três regras ao personalizar que lhe pouparão horas de depuração.
Primeira: o valor do parâmetro $user não deve coincidir com palavras-chave reservadas do WordPress. Quatro chaves estão reservadas: loggedout para terminar sessão, action para redefinição de palavra-passe, redirect_to para redirecionamentos após o login e wp_lang para mudar o idioma. Se usar qualquer uma destas palavras, o login automático não funcionará ou quebrará o comportamento padrão do núcleo.
Segunda: a palavra-passe é armazenada em texto simples no código do plugin, por isso nunca use este snippet para contas de administrador ou editor num site ativo. Um utilizador de demonstração com o perfil de Subscritor ou, no máximo, Editor, é aceitável. Um administrador com login automático via link é uma brecha que um atacante encontrará num segundo.
Terceira: se o site funcionar em HTTPS, substitua false por true no segundo argumento do wp_signon(). Isto ativará o cookie seguro e impedirá a interceção do token de autenticação durante a transmissão na rede.
O endereço de login terá este aspeto: https://your-site.com/wp-login.php?autologin=dummy. Ao segui-lo, o utilizador entra instantaneamente no painel de administração. Sem ecrãs intermédios, sem copiar e colar credenciais.
Multi-conta: um link, contas diferentes
E se o site de demonstração mostrar o produto a partir de diferentes perfis? O administrador vê o painel de configurações, o editor vê a interface de publicação, o subscritor vê a conta pessoal. Para este cenário, estendemos o snippet para suportar várias contas:
1 <?php 2 /* 3 Plugin Name: Auto Login 4 Plugin URI: https://techblog.sdstudio.top/ 5 Description: Automatic login for demo accounts. Configure accounts in the array below. 6 Version: 1.0.0 7 Author: Harri Bell-Thomas 8 */ 9 10 $autologin_param = 'autologin'; 11 12 $autologin_accounts = array( 13 array( 14 'user' => 'demo', 15 'pass' => 'demo', 16 'location' => 'wp-admin', 17 ), 18 array( 19 'user' => 'editor_demo', 20 'pass' => 'demo', 21 'location' => 'wp-admin/post-new.php', 22 ), 23 ); 24 25 function autologin() { 26 global $autologin_param, $autologin_accounts; 27 28 foreach ( $autologin_accounts as $account ) { 29 if ( $_GET[ $autologin_param ] === $account['user'] ) { 30 $creds = array( 31 'user_login' => $account['user'], 32 'user_password' => $account['pass'], 33 'remember' => true, 34 ); 35 36 $user = wp_signon( $creds, false ); 37 38 if ( ! is_wp_error( $user ) ) { 39 wp_redirect( admin_url( $account['location'] ) ); 40 exit; 41 } 42 } 43 } 44 } 45 add_action( 'after_setup_theme', 'autologin' );
A mecânica é a mesma, mas o array $autologin_accounts armazena as credenciais de todos os utilizadores de demonstração, e o foreach itera sobre elas procurando uma correspondência pelo valor do parâmetro de URL. Adicionar uma nova conta resume-se a copiar o bloco do array com novos valores de user, pass e location.
O parâmetro location aceita qualquer caminho relativo dentro de /wp-admin/: por exemplo, options-general.php para a página de configurações, edit.php para a lista de artigos ou post-new.php para criar um novo artigo. Também pode especificar um URL completo para redirecionar para o frontend, mas nesse caso substitua admin_url( $account['location'] ) por $account['location'] no código.
O ponto de entrada é o mesmo: https://your-site.com/wp-login.php?autologin=editor_demo, e o utilizador aterra na página de criação de artigos em vez da raiz da administração. Para o proprietário do site de demonstração, isto significa controlo total sobre a primeira impressão: cada tipo de utilizador vê exatamente a parte do produto que é relevante para os seus interesses.
⁉️🤔 Perguntas frequentes
É seguro armazenar palavras-passe no código do plugin?
Não, não é seguro. O snippet foi concebido para sites de demonstração onde as contas são intencionalmente públicas e não têm privilégios reais. Num site de produção com utilizadores reais, esta abordagem é inaceitável: a palavra-passe em texto simples pode ser exposta durante qualquer auditoria de código. Para cenários de produção, considere um mecanismo de token único ou SSO via REST API com verificação de nonce.
Porquê usar diretamente o wp_signon em vez da ação wp_login?
O hook
wp_loginé acionado após um login bem-sucedido, não realiza a autorização em si. Owp_signon()é a função que autentica o utilizador: verifica a palavra-passe através dowp_authenticate(), define o cookie e aciona owp_logincomo consequência. Se precisar apenas de autorizar um utilizador programaticamente, owp_signoné a sua ferramenta.
Posso inserir o snippet no functions.php em vez de um plugin separado?
Sim, o código também funcionará no
functions.phpdo tema. Mas um plugin é mais conveniente: o login automático não fica preso ao tema e não se quebrará ao mudar de tema. Além disso, o plugin pode ser desativado com um clique sem editar ficheiros no servidor.
O que fazer se, após o login, o utilizador não estiver autenticado no is_user_logged_in?
Esta é uma particularidade conhecida do
wp_signon()quando chamado antes do hookinit: o cookie é definido, mas a variável global$current_userainda não foi atualizada. A solução é chamar forçadamentewp_set_current_user( $user->ID )imediatamente após umwp_signon()bem-sucedido. No nosso snippet, isto não é crítico porque se segue um redirecionamento imediato, mas em cenários sem redirecionamento a linha é obrigatória.
O snippet funciona em multisite?
Sim, mas com uma ressalva. O
wp_signon()autentica o utilizador dentro do site atual na rede. Se a conta existir apenas num dos subsites, o login automático não funcionará nos outros. Para autenticação cruzada em toda a rede, use uma combinação dewp_signon()ewp_set_auth_cookie()com instalação forçada de cookie para o domínio principal.
Snippet de login automático: resumo final
Quinze linhas de PHP eliminam o principal atrito no funil do site de demonstração: copiar o nome de utilizador e a palavra-passe. Um link, e o visitante está dentro do produto, com o perfil e na secção que escolheu.
A versão básica cobre o cenário de "um utilizador de demonstração", a alargada cobre qualquer número de perfis com diferentes pontos de redirecionamento. Ambas não dependem do tema, não requerem plugins de terceiros e são ativadas num minuto.
A regra de segurança principal é não elevar privilégios. Um utilizador de demonstração com o perfil de Subscritor ou, no máximo, Editor é aceitável. Um administrador com login automático via link é uma brecha que um atacante encontrará num segundo.
Se o acesso de demonstração é um canal de vendas para si, o login automático deixa de ser um "extra agradável" e passa a ser um elemento de conversão obrigatório. Um link em vez de nome de utilizador e palavra-passe é a diferença entre "vou experimentar mais tarde" e "vou experimentar agora".



