Enquanto estudava para gravar os vídeos sobre as novidades para desenvolvedores do WordPress 5.2 “Jaco” lá para o canal do YouTube, acabei tendo que escrever um código para salvar o link enviado por e-mail pelo novo Modo de restauração do WordPress.
Graças ao novo recurso de detecção de erros fatais, ao perceber um problema em um plugin ou tema, o WordPress envia um e-mail para o administrador do site. Este e-mail contém um link de acesso para o novo Modo de restauração, mas um dos parâmetros deste endereço é salvo criptografado no banco de dados, ou seja, essa informação só está disponível no e-mail. Se o e-mail não chegar, não dá pra acessar (até rimou).
Nos meus testes locais, mesmo com um plugin de SMTP configurado, o e-mail não chegou. Por isso criei o plugin abaixo e o salvei como um must use plugin, isto é, um plugin que não pode ser desabilitado. Para salvar um plugin desta forma basta colocar o arquivo PHP na pasta mu-plugins dentro da pasta wp-content. Ela ficará no mesmo nível que as pastas plugins e themes e, caso ela ainda não exista, você deverá criá-la.
<?php
/*
* Plugin name: Store Recovery Keys
*/
add_action(
'generate_recovery_mode_key',
function( $token, $key ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
global $wp_filesystem;
WP_Filesystem();
$upload_dir = wp_upload_dir();
$php = '<?php // ' . add_query_arg(
array(
'action' => 'enter_recovery_mode',
'rm_token' => $token,
'rm_key' => $key,
),
wp_login_url()
) . ' ?>';
$wp_filesystem->put_contents( trailingslashit( $upload_dir['basedir'] ) . 'recovery-links.php', $php, 0644 );
},
10,
2
);
Vale lembrar que a pasta mu-plugins funciona de um jeito um pouco diferente da plugins: os arquivos PHP devem estar na raíz da pasta. Must use plugins dentro de subpastas não são reconhecidos. Então, eu criei um arquivo com o nome store-recovery-keys.php, coloquei o conteúdo acima e salvei. Depois disso, o link de acesso é salvo dentro da pasta wp-content/uploads, em um arquivo com nome recovery-links.php.
Como alterar o e-mail que recebe o link do Modo de restauração
O WordPress 5.2 possibilita que você altere o destinatário do e-mail que contém esse link de duas formas.
A constante RECOVERY_MODE_EMAIL
O primeiro jeito, e o mais simples, é configurando a constante RECOVERY_MODE_EMAIL
no seu wp-config.php. Antes da parte que diz /* Isto é tudo, pode parar de editar! :) */
, você pode colocar algo como:
define( 'RECOVERY_MODE_EMAIL', '[email protected]' );
O filtro recovery_mode_email
Também é possível alterar o e-mail que recebe o link para o Modo de restauração através do filtro recovery_mode_email, da seguinte forma:
add_filter(
'recovery_mode_email',
function( $email_data ) {
$email_data['to'] = '[email protected]';
return $email_data;
}
);
Como alterar o tempo de envio dos e-mails do Modo de restauração
Por padrão, o Modo de restauração do WordPress espera um dia inteiro para enviar outro e-mail. Você pode alterar esse intervalo usando o filtro recovery_mode_email_rate_limit. Recomendo que você coloque este código em um plugin separado, afinal se o código estiver no arquivo functions.php do seu tema e seu tema for “pausado” pela nova funcionalidade, o código vai ser ignorado.
add_filter(
'recovery_mode_email_rate_limit',
function( $interval ) {
return 12 * DAY_IN_SECONDS;
}
);
Você pode usar as constantes de tempo fornecidas pelo WordPress. Falei sobre elas no post com 4 dicas rápidas de programação no WordPress.
Outras funções e configurações disponíveis
O novo recurso trouxe muitas opções e funções úteis. Falei sobre elas no vídeo, mas vou listar aqui também, afinal um pouco de SEO não faz mal para ninguém.
wp_is_recovery_mode()
Com a função wp_is_recovery_mode() você pode testar se o usuário está no Modo de restauração ou não. Pode ser útil para exibir algum aviso ou fazer seu plugin se comportar de uma forma um pouco diferente talvez.
WP_RECOVERY_MODE_SESSION_ID
Ter essa constante definida no seu wp-config.php vai forçar a entrada no modo de restauração, ou seja, se ela não estiver envolvida por um teste qualquer, todo mundo sempre vai estar no modo de restauração. Use com cuidado.
Drop-ins php-error.php e fatal-error-handler.php
Expliquei o que são drop-ins, ou plugins avançados, no vídeo, mas basicamente são arquivos com nomes predefinidos que ficam na pasta wp-content. O advanced-cache.php é o mais famoso deles.
Com os novos drop-ins você pode alterar a mensagem de erro exibida (php-error.php) ou alterar a forma como o WordPress vai lidar com o erro (fatal-error-handler.php). Neste último você deve estender a classe WP_Fatal_Error_Handler
e retornar uma instância no final do arquivo.
Lembre-se que drop-ins que alteram algo exibido na tela, como o php-error.php e o db-error.php, não estão ligados ao tema porque o WordPress possivelmente nem chegou até o ponto de incluir seu tema na execução. Pense nisso ao definir o estilo dos elementos na tela, ou seja, não conte com nada que esteja no seu tema.
Desativar completamente o Modo de restauração
Para desativar completamente o recurso, você pode usar a constante WP_DISABLE_FATAL_ERROR_HANDLER
. É só configurá-la no seu arquivo wp-config.php:
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
Útil para os casos de empresas de hospedagem, por exemplo, que lidam com erros de forma personalizada.
Testar se o Modo de restauração está disponível
É possível testar se o modo de restauração está disponível através da função wp_is_fatal_error_handler_enabled(). Esta função serve para descobrir se o modo está disponível, ou seja, se ele não foi desativado pela constante WP_DISABLE_FATAL_ERROR_HANDLER
. Esta função é bem diferente da função wp_is_recovery_mode()
, que serve para saber se o modo está sendo executado neste exato momento.
Está a fim de ajudar? Compartilhe este conteúdo nas suas redes sociais! 🙂