Back

Como Adicionar JavaScript Personalizado a Temas WordPress

Como Adicionar JavaScript Personalizado a Temas WordPress

Você deseja adicionar JavaScript personalizado ao seu tema WordPress. Talvez seja um efeito de rolagem, um snippet de rastreamento de terceiros ou funcionalidade interativa. Você cola o código no arquivo de template e nada funciona—ou pior, você mistura PHP e JavaScript e quebra tudo.

Isso acontece constantemente. A solução é direta: use o sistema de gerenciamento de scripts integrado do WordPress em vez de codificar tags <script> diretamente.

Pontos-Chave

  • Sempre use wp_enqueue_script para adicionar JavaScript a temas WordPress em vez de codificar tags <script> diretamente nos templates.
  • Mantenha PHP e JavaScript em arquivos separados para evitar conflitos e manter código limpo e depurável.
  • Use carregamento condicional com funções como is_singular() ou is_page() para carregar scripts apenas onde são necessários.
  • Aproveite as estratégias de carregamento defer e async (disponíveis desde o WordPress 6.3) para melhor desempenho da página.

Por Que Você Deve Enfileirar Scripts no WordPress

O WordPress funciona em um ecossistema complexo de temas e plugins. Quando você insere JavaScript diretamente nos templates, você cria problemas:

  • Carregamento duplicado: Múltiplos plugins podem carregar a mesma biblioteca.
  • Falhas de dependência: Seu script é executado antes que suas dependências sejam carregadas.
  • Problemas de cache: Navegadores não conseguem fazer cache adequado de scripts inline.
  • Conflitos: Scripts interferem uns com os outros sem coordenação.

A função wp_enqueue_script resolve esses problemas permitindo que o WordPress gerencie a ordem de carregamento dos scripts, dependências e local de saída.

A Forma Correta de Adicionar JavaScript ao WordPress

Passo 1: Crie Seu Arquivo JavaScript

Coloque seu JavaScript no diretório do seu tema. Uma estrutura comum:

your-theme/
├── js/
│   └── custom.js
├── functions.php
└── style.css

Escreva JavaScript limpo sem misturar PHP:

document.addEventListener('DOMContentLoaded', function() {
    // Seu código aqui
});

Passo 2: Enfileire o Script no functions.php

Adicione isto ao functions.php do seu tema:

function mytheme_enqueue_scripts() {
    wp_enqueue_script(
        'mytheme-custom',                              // Handle
        get_template_directory_uri() . '/js/custom.js', // Source
        array(),                                        // Dependencies
        '1.0.0',                                        // Version
        array( 'in_footer' => true )                   // Load in footer
    );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts' );

Para temas filhos, use get_stylesheet_directory_uri() em vez de get_template_directory_uri().

Entendendo os Parâmetros do wp_enqueue_script

A função aceita cinco parâmetros:

ParâmetroPropósitoExemplo
$handleIdentificador único'mytheme-custom'
$srcURL do arquivoget_template_directory_uri() . '/js/file.js'
$depsScripts necessários que devem carregar primeiroarray( 'jquery' )
$verString de versão para invalidação de cache'1.0.0'
$argsEstratégia de carregamento e localizaçãoarray( 'in_footer' => true, 'strategy' => 'defer' )

Carregamento Condicional de Scripts

Não carregue scripts em todos os lugares quando eles são necessários apenas em páginas específicas:

function mytheme_enqueue_scripts() {
    if ( is_singular( 'post' ) ) {
        wp_enqueue_script( 'mytheme-post-scripts', /* ... */ );
    }

    if ( is_page( 'contact' ) ) {
        wp_enqueue_script( 'mytheme-contact-form', /* ... */ );
    }
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts' );

Estratégias de Carregamento Conscientes de Desempenho

O WordPress 6.3 introduziu suporte nativo para carregamento defer e async:

wp_enqueue_script(
    'mytheme-analytics',
    get_template_directory_uri() . '/js/analytics.js',
    array(),
    '1.0.0',
    array(
        'in_footer' => true,
        'strategy'  => 'defer'
    )
);

Defer executa scripts após a análise do DOM mantendo sua ordem declarada. Async executa scripts imediatamente após o download, sem ordem garantida. Use defer para a maioria dos casos e async para scripts independentes como analytics.

WordPress Moderno: Módulos de Script e Integração com Blocos

O WordPress continua evoluindo seu tratamento de JavaScript. Dois desenvolvimentos que valem a pena notar:

API de Módulos de Script: O WordPress 6.5 introduziu wp_enqueue_script_module() para módulos ES nativos. Isso habilita padrões modernos de JavaScript com importações de módulos adequadas.

Temas baseados em blocos: Se você está construindo blocos, declare scripts no block.json usando os campos viewScript ou viewScriptModule em vez de enfileiramento manual. O WordPress gerencia o carregamento automaticamente quando o bloco é renderizado.

Essas abordagens funcionam junto com o enfileiramento tradicional—escolha baseado nas necessidades do seu projeto.

Conclusão

Adicionar JavaScript personalizado a temas WordPress requer usar o sistema de enfileiramento, não tags de script codificadas diretamente. Crie arquivos JavaScript separados, registre-os com wp_enqueue_script, declare dependências adequadamente e use carregamento condicional para evitar requisições desnecessárias. Para melhor desempenho, aproveite as estratégias defer e async disponíveis desde o WordPress 6.3.

O padrão é simples: mantenha PHP e JavaScript separados, deixe o WordPress gerenciar o carregamento, e seus scripts funcionarão de forma confiável através de temas e plugins.

Perguntas Frequentes

Sim. Em vez de passar um caminho de arquivo local como fonte, forneça a URL completa do script externo. Por exemplo, use https://cdn.example.com/library.min.js como segundo parâmetro. O WordPress irá gerar a tag script com essa URL. Você ainda pode definir dependências, versionamento e estratégia de carregamento normalmente.

O WordPress ignora registros duplicados. Uma vez que um handle é enfileirado, quaisquer chamadas subsequentes usando o mesmo handle são ignoradas. Isso previne que o mesmo script seja carregado múltiplas vezes, o que é uma das principais vantagens do sistema de enfileiramento sobre adicionar manualmente tags de script aos templates.

Use a função wp_localize_script ou a mais recente wp_add_inline_script. wp_localize_script cria um objeto JavaScript com seus dados PHP e o anexa a um handle de script específico. Isso permite passar valores como URLs AJAX, tokens nonce ou configurações do tema do PHP para seu JavaScript sem misturar as duas linguagens.

O WordPress não mais inclui jQuery por padrão em temas baseados em blocos. Para novos projetos, JavaScript vanilla ou frameworks modernos são geralmente preferidos. Se seu tema ou seus plugins ainda dependem do jQuery, você pode enfileirá-lo listando jquery como dependência. Caso contrário, escrever JavaScript vanilla sem dependências mantém seu tema mais leve e rápido.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay