Wordpress Enqueue Script Chaos (jQuery e Foundation.js)

2

Eu tenho trabalhado na construção de um tema para os últimos dois dias agora, e eu me deparo com uma parede. Embora eu tenha incluído originalmente o foundation.js como um script em fila, não consegui me lembrar por que o adicionei. Hoje, quando eu tentei removê-lo (para melhorar a velocidade de carregamento da página) do meu arquivo functions.php, ele bagunçou todos os meus plugins jQuery.

Após algumas pesquisas, descobri que o Foundation inclui o jQuery, então eu estava carregando duas instâncias dele por vez (eu também carreguei da pasta js do tema). Então, agora que eu removi o foundation, meus comandos de arquivo custom.js não funcionam, a menos que eu preencha 'jQuery' em vez do '$' mais simples.

Eu acho que há uma parte da minha instalação do Wordpress que fiz o bug fora, mesmo se eu mantiver a referência de nome 'Foundation' com o arquivo jQuery chamado anteriormente, o tema funciona. É como se tivesse que ter o nome 'Foundation'.

Abaixo, incluí minhas chamadas de script, bem como meu arquivo js personalizado, na esperança de que alguém possa me ajudar a diagnosticar esse problema.

Links:

- Mensagem de erro do console do Google Chrome

- jQuery & Plug-ins exibidos carregando no Console do Chrome

CHAMADAS DO SCRIPT:

function register_js() {
if (!is_admin()) {
    wp_deregister_script('jquery');
    wp_deregister_script('foundation');
    wp_register_script('jquery', get_template_directory_uri() . '/js/libraries/jquery-1.7.1.min.js');
    wp_register_script('jquery-ui', get_template_directory_uri() . '/js/libraries/jquery-ui-1.8.16.min.js', 'jquery');
    wp_register_script('superfish', get_template_directory_uri() . '/js/plugins/jquery.superfish.js', 'jquery');
    wp_register_script('supersubs', get_template_directory_uri() . '/js/plugins/jquery.supersubs.js', 'jquery');
    //wp_register_script('foundation', get_template_directory_uri() . '/js/plugins/jquery.foundation.js', 'jquery');
    wp_register_script('custom', get_template_directory_uri() . '/js/custom.js', array('jquery','jquery-ui') );
    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui');
    wp_enqueue_script('superfish');
    wp_enqueue_script('supersubs');
    //wp_enqueue_script('foundation');
    wp_enqueue_script('custom');
}
}
add_action('init', 'register_js');

CUSTOM JS FILE:

$(document).ready(function() {

/* Menu - Superfish */
$('ul.menu').supersubs({ 
    minWidth:    11,
    maxWidth:    30,
    extraWidth:  1    
}).superfish({ 
    hoverClass: "sfHover", 
    speed: 'fast', 
    dropShadows: false, 
    delay: 0,
    autoArrows: false,
    animation: {height:'show',opacity:'show'}
});

/* Blog Tabs */
$('#tab_controls').tabs({ fx: [ {opacity:'toggle', duration:'normal'},{opacity:'toggle', duration:'slow'}] }); 

});
    
por Matt 09.02.2012 / 19:39

2 respostas

9

Tente alterar a primeira linha do seu arquivo JS personalizado.

jQuery(document).ready(function($) {

O jQuery operado dentro do WordPress deve ser executado no modo de compatibilidade. Essa linha permite que isso aconteça, conforme o ponto 5 aqui .

    
por dunc 09.02.2012 / 19:48
6

Primeiro, se o seu tema tiver a intenção de ser distribuído publicamente, não cancele o registro dos scripts principais e os substitua pelos seus próprios . Isso inclui jQuery, jQuery UI e vários outros scripts .

Segundo, sim: o WordPress é executado com jQuery no-conflict, o que significa que você deve levar em conta a ausência de conflitos em seus scripts. O método recomendado pelo Codex está aqui :

jQuery(document).ready(function($) {
    // $() will work as an alias for jQuery() inside of this function
});

Esses dois provavelmente não têm nada a ver com seus problemas, mas são a melhor prática:

  1. Se você chamar wp_register_script() e wp_enqueue_script() no mesmo contexto / função, simplesmente omita wp_register_script() e use wp_enqueue_script() .
  2. Conecte-se a wp_enqueue_scripts , em vez de init .
por Chip Bennett 09.02.2012 / 19:48