
🛠 Como carregar um script e estilos apenas na página inicial do WordPress
Adicionou um slider pesado em todo o site apenas para uma animação na página inicial? Dezenas de kilobytes desnecessários são carregados em cada página: artigos internos, contactos, o mapa do site. Os visitantes esperam e o Google reduz as pontuações do seu Core Web Vitals.
O problema não são os plugins ou o tema. O problema é que o WordPress não distingue entre páginas ao registar scripts por defeito. Uma única linha wp_enqueue_script no functions.php e o ficheiro carrega em todo o lado: a página inicial, o painel de administração e a página de login.
Abaixo estão três métodos funcionais para enfileirar scripts e estilos estritamente para a página inicial. Sem plugins de otimização. Apenas PHP e tags condicionais do WordPress.
💡 Visão geral rápida:
- Identifique o tipo da sua página inicial: página estática ou últimos artigos, porque a tag condicional depende disso
- Use
is_front_page()para uma página inicial estática eis_home()para a página do blogue - Coloque o código no functions.php do seu tema filho ou através do plugin Code Snippets
- Verifique através de DevTools → Rede que os scripts não carregam nas páginas internas
Passo 1. Identifique o tipo da sua página inicial
O WordPress distingue dois conceitos: Página Inicial, o que o visitante vê no URL raiz do site, e Página de Artigos, a página que exibe os artigos do blogue. Podem ser a mesma (página inicial = feed de artigos) ou diferentes (página inicial = página estática, enquanto o blogue reside num URL separado).
Abra o painel de administração: Configurações → Leitura. Na secção "A página inicial mostra":
- "Os meus últimos artigos": a página inicial e a página do blogue são a mesma. No código, use
is_home()ouis_front_page(); ambos devolverãotrue. - "Uma página estática" com uma página inicial selecionada: use
is_front_page(). Aquiis_home()devolverátrueapenas na página do blogue (se uma estiver atribuída separadamente).
Se não tiver a certeza, opte por is_front_page(). É mais fiável porque é acionado na página inicial independentemente da configuração.
Passo 2. Enfileirar o script apenas para a página inicial
O código vai no ficheiro functions.php do seu tema filho. Se não tiver um tema filho, use o plugin Code Snippets (passo 5): editar o functions.php do tema principal será sobrescrito na próxima atualização.
O exemplo abaixo enfileira um ficheiro JavaScript no rodapé apenas quando o visitante está na página inicial:
1 /** 2 * Enqueues a custom script only on the front page. 3 * Hook location: child theme's functions.php or Code Snippets. 4 */ 5 add_action('wp_enqueue_scripts', function () { 6 if (! is_front_page()) { 7 return; 8 } 9 10 wp_enqueue_script( 11 'my-frontpage-script', // handle — unique name 12 get_template_directory_uri() . '/js/frontpage.js', // path to file 13 array(), // dependencies (jquery, etc.) 14 '1.0.0', // version for cache busting 15 true // true = in footer, false = in head 16 ); 17 });
Eis o que acontece. O hook wp_enqueue_scripts é o local correto para registar scripts de front-end (não init, não wp_head). is_front_page() verifica que estamos na página inicial. A função wp_enqueue_script adiciona o ficheiro à fila e o próprio WordPress insere a tag <script> no rodapé, antes do fecho de </body>.
Nota: get_template_directory_uri() devolve o URL da pasta do tema principal. Se o ficheiro estiver no tema filho, substitua por get_stylesheet_directory_uri().
Passo 3. Enfileirar estilos da mesma forma
Para um ficheiro CSS a lógica é idêntica: tag condicional + wp_enqueue_style. O código vai para a mesma função que os scripts; não é necessário um hook separado.
1 if (is_front_page()) { 2 wp_enqueue_style( 3 'my-frontpage-styles', 4 get_template_directory_uri() . '/css/frontpage.css', 5 array(), 6 '1.0.0' 7 ); 8 }
O quinto parâmetro de wp_enqueue_style é o tipo de media. O padrão é 'all'. Se os estilos forem apenas para ecrãs com mais de 768px, especifique 'screen and (min-width: 768px)'.
Combine scripts e estilos numa única função. Desta forma evita verificações redundantes:
1 add_action('wp_enqueue_scripts', function () { 2 if (! is_front_page()) { 3 return; 4 } 5 6 wp_enqueue_script( 7 'my-frontpage-script', 8 get_template_directory_uri() . '/js/frontpage.js', 9 array(), 10 '1.0.0', 11 true 12 ); 13 14 wp_enqueue_style( 15 'my-frontpage-styles', 16 get_template_directory_uri() . '/css/frontpage.css', 17 array(), 18 '1.0.0' 19 ); 20 });
Um return antecipado no topo da função é mais limpo do que blocos if aninhados. O código é mais longo, mas lê-se mais rapidamente.
Passo 4. Caso especial: página inicial e página do blogue
Se Configurações → Leitura estiver definido como "Os meus últimos artigos", is_front_page() e is_home() funcionam de forma idêntica. Mas se a página inicial for uma página estática e o blogue residir em /blog/, precisa de uma verificação dupla.
Para enfileirar um script APENAS na página do blogue (não na página inicial estática), use is_home():
1 if (is_home()) { 2 // Code will only run on the posts page 3 }
Para enfileirar em AMBAS a página inicial E a página do blogue, combine-as:
1 if (is_front_page() || is_home()) { 2 // Code will run on both "home" pages 3 }
Para a lista completa de tags condicionais, consulte a documentação oficial do WordPress. Aí encontrará também is_page (página por slug), is_single (artigo único), is_category (arquivo de categoria) e dezenas de outras verificações para um controlo granular do carregamento.
Passo 5. Sem editar o functions.php: o plugin Code Snippets
Se preferir não mexer nos ficheiros do tema, instale o plugin gratuito Code Snippets do diretório WordPress.org. Ele adiciona uma secção Snippets → Adicionar Novo no painel de administração: cole o seu código, escolha executá-lo "no front-end" e guarde. O efeito é o mesmo que o functions.php, mas o código sobrevive a uma mudança de tema.
Outra vantagem do Code Snippets: se cometer um erro de sintaxe, o plugin captura o erro fatal e permite reverter a alteração. Ao editar o functions.php através do painel de administração, um único parêntese em falta derruba o site inteiro. Faça sempre uma cópia de segurança completa antes de editar ficheiros do tema.
Verificar o resultado
Abra o seu site, pressione F12 → separador Rede e atualize a página. Na lista de pedidos, encontre o seu script (frontpage.js ou o nome que lhe deu). Agora navegue para qualquer página interna e atualize; o script não deve aparecer na lista.
Se o script ainda carregar em todo o lado, verifique o seguinte:
- O hook é definitivamente
wp_enqueue_scriptse nãoinit? Oinité acionado antes de o contexto da página ser determinado, pelo que as tags condicionais podem devolver resultados incorretos. - O ficheiro está no functions.php do tema filho? O tema principal pode ter substituído o hook.
- Há um plugin de otimização a fazer cache? Limpe-a.
⁉️🤔 Perguntas frequentes
*Qual é a diferença entre is_front_page() e is_home()?*
is_front_page()devolvetruena página inicial do site em QUALQUER configuração, quer exiba os últimos artigos ou uma página estática.is_home()devolvetrueapenas na página de artigos do blogue. Se Configurações → Leitura estiver definido como "Os meus últimos artigos", ambas as tags devolvemtrue. Se a página inicial for uma página estática,is_home()é acionado apenas em/blog/(se uma estiver atribuída).
Porque é que o meu código no functions.php não funciona?
Três razões mais comuns. Primeira: usar o hook
initem vez dewp_enqueue_scripts, porque as tags condicionais ainda não estão definidas noinit. Segunda: o functions.php do tema principal foi sobrescrito por uma atualização; use sempre um tema filho ou o Code Snippets. Terceira: o caminho do ficheiro está errado.get_template_directory_uri()aponta para a pasta do tema principal, enquantoget_stylesheet_directory_uri()aponta para a pasta do tema filho. Verifique fazendo echo do valor e abrindo o URL num navegador.
Posso enfileirar um script em várias páginas específicas?
Sim. Substitua
is_front_page()poris_page(array('about', 'contact'))e o script carregará nas páginas com os slugsaboutecontact. Ou useis_single('post-slug')para um artigo específico. A lista completa de tags condicionais está em developer.wordpress.org.
*Qual é a diferença entre get_template_directory_uri() e get_stylesheet_directory_uri()?*
O primeiro devolve o URL da pasta do tema principal; o segundo devolve o URL da pasta do tema filho. Se estiver a trabalhar num tema filho e o ficheiro estiver armazenado lá, use
get_stylesheet_directory_uri(). Se o ficheiro estiver no tema principal (ou tiver apenas um tema, sem filho), useget_template_directory_uri(). Um caminho errado é a razão número um para um script não carregar.
Devo usar $_SERVER['REQUEST_URI'] para a verificação?
Não.
$_SERVER['REQUEST_URI']quebra com parâmetros de consulta:/?utm_source=twitterjá não é igual a/. Além disso, alguns alojamentos incluem o caminho completo com o subdiretório emREQUEST_URI. As tags condicionais do WordPress são mais fiáveis e funcionam de raiz.
Conclusões: três linhas que melhoram a velocidade de carregamento
Na prática, a maioria dos sites precisa apenas de um único is_front_page() e de um par de chamadas wp_enqueue_script/wp_enqueue_style.
O carregamento condicional de scripts não é uma micro-otimização. Um único plugin de slider "pesado" com 300 KB, enfileirado em todo o site para uma animação na página inicial, adiciona meio segundo ao tempo de carregamento de cada página interna. Multiplique isso pelo número de visitantes e obtém classificações de pesquisa perdidas.
A regra é simples: um ficheiro carrega onde é usado. Para a página inicial, is_front_page(). Para o blogue, is_home(). Para uma página específica, is_page('slug').
- Se tem uma página inicial estática, use
is_front_page()e mantenha a simplicidade. - Se a página inicial é o feed de últimos artigos, qualquer uma das tags funcionará.
- Se scripts e estilos se repetem em várias páginas, extraia as condições para um array e verifique com
in_array().
Comece com uma auditoria: abra DevTools → Cobertura (três pontos em Rede → Mais ferramentas → Cobertura), atualize a página e veja quantos kilobytes de JS e CSS não são utilizados. O número vai surpreendê-lo. Que técnica de carregamento condicional utiliza? Partilhe nos comentários.



