
Você cola um snippet no fim do functions.php, funciona, e três semanas depois o tema atualiza e o código sumiu junto. Ou pior: faltou um ponto e vírgula e o site inteiro ficou branco, painel incluído. O lugar desse tipo de código é wp-content/mu-plugins, a pasta dos must-use plugins.
A pasta não vem pronta na instalação. Crie ela já com o dono certo, senão o passo seguinte esbarra em permissão:
sudo -u www-data mkdir -p /var/www/seusite/html/wp-content/mu-plugins
sudo -u www-data nano /var/www/seusite/html/wp-content/mu-plugins/00-ajustes.php<?php
/**
* Plugin Name: Ajustes do site
* Description: Snippets que não podem sumir na atualização do tema.
*/if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'wp_robots', function ( $robots ) {
$robots['max-image-preview'] = 'large';
return $robots;
} );O wp_get_mu_plugins() lê a pasta apontada por WPMU_PLUGIN_DIR, ordena os nomes com sort() e o wp-settings.php dá include_once em cada .php — antes dos plugins comuns e bem antes do tema. Não existe botão de desativar na lista do painel, o arquivo sobrevive a atualização de tema e continua valendo se alguém trocar o tema inteiro amanhã.
.php na raiz da pasta; subpasta é ignorada, a não ser que um arquivo da raiz faça o require.sort(). É para isso que serve o prefixo 00- no nome.register_activation_hook() nunca dispara aqui: ele só pendura o callback na ação activate_{plugin}, e esse evento não existe para must-use. Nada de criar tabela ou gravar opção de instalação nesse arquivo.Para conferir se o WordPress enxergou, rode sudo -u www-data wp plugin list --status=must-use. E não se iluda com a proteção: erro de sintaxe aqui derruba o site igual, com o agravante de você não poder desativar pelo painel. Passe um php -l 00-ajustes.php antes de sair da tela.
O Google Ads acusa consentimento ausente porque o gtag sobe antes do banner. Veja como injetar o default denied do…
A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…
Chegou um chamado sem passo a passo e sem exemplo. Veja como virar esse relato em um caso de teste…
Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…
O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…
Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…