Como sobrescrever arquivos JavaScript no tema filho?

34

Estou carregando alguns arquivos JavaScript no tema pai. O caminho no tema pai é:

scripts > custom.js

No tema filho, estou criando o mesmo caminho ( scripts > custom.js ) e alterando alguns dos jQuery dentro do arquivo custom.js .

O problema é que as mudanças não estão sendo aplicadas. Esta é a maneira errada de fazer alterações nesses arquivos no tema filho?

    
por Chris Molitor 25.08.2011 / 00:14

3 respostas

42

Temas filhos apenas sobrescrevem arquivos php (como header.php) que estão incluídos em funções como get_template_part ou get_header, etc.

A maneira correta de adicionar scripts ao WordPress é com wp_enqueue_script . Se o seu tema pai usar isso, você poderá substituir os arquivos JS usando wp_dequeue_script e criar o seu próprio arquivo.

Como assim ...

<?php
// hook in late to make sure the parent theme's registration 
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
    wp_dequeue_script('parent_theme_script_handle');
    wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}

Se o tema pai não estiver usando o wp_enqueue_script, ele provavelmente estará conectando em wp_head (ou wp_footer) para fazer o eco dos scripts lá. Então, você usaria remove_action para se livrar dessas funções fazendo ecoar os scripts e, em seguida, enfileirar seu próprio script.

Se o script for codificado no arquivo de modelo, você só precisará substituir esse arquivo de modelo no tema filho sem a tag de script.

Se eles usaram as chamadas wp_enqueue_script que utilizam get_stylesheet_directory_uri , você não precisará fazer nada. Como isso não está acontecendo, você só precisa dar uma olhada e ver o que o autor do tema fez.

    
por chrisguitarguy 25.08.2011 / 00:27
1

Em alguns casos, é importante priorizar as chamadas de função add_action e wp_enqueue_script da seguinte forma:

add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
    wp_dequeue_script('storefront-navigation');
    wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}

Nesse caso, wp_enqueue_scripts foi chamado pelo pai com uma prioridade de 20120206 (a data) e, portanto, essa ação é adicionada com uma prioridade apenas um pouco maior para que seja imediatamente retirada. Em seguida, a instrução de enfileiramento que segue a seguir é, na verdade, priorizada depois disso para garantir que ela seja carregada depois que a antiga foi removida. O verdadeiro, neste caso, também é importante porque especifica que ele deve ser enfileirado no rodapé, que é onde o script pai foi enfileirado primeiro.

Além disso, não consigo explicar completamente, mas percebo que, se você for cuidadoso ao remover o script inicial imediatamente após o enfileiramento, parece que é possível impedir que ele seja carregado em primeiro lugar.

    
por damiankaelgreen 11.11.2015 / 02:24
1

chame wp_deregister_script antes de registrar sua própria versão

    
por Mohamed Abo Badawy 25.12.2016 / 16:17