Wordpress Enqueue Script Chaos (jQuery & Foundation.js)

2

He estado trabajando en la creación de un tema durante los últimos dos días, y me he topado con una pared. Aunque originalmente incluí foundation.js como un guión en cola, no podía recordar por qué lo había agregado. Hoy, cuando intenté eliminarlo (para mejorar la velocidad de carga de la página) de mi archivo functions.php, se desordenaron todos mis complementos de jQuery.

Después de investigar un poco, descubrí que Foundation ya incluye jQuery, así que estaba cargando dos instancias a la vez (también cargué desde la carpeta js del tema). Por lo tanto, ahora que he eliminado Foundation, los comandos de mi archivo custom.js no funcionan a menos que yo precarpe 'jQuery' en lugar del simple '$'.

Creo que hay una parte de mi instalación de Wordpress en la que hice errores, incluso si mantengo la referencia del nombre 'Foundation' con el archivo jQuery llamado anteriormente, el tema funciona. Es como si tuviera que tener ese nombre de 'Fundación'.

A continuación, he incluido mis llamadas de script, así como mi archivo js personalizado, con la esperanza de que alguien pueda ayudarme a diagnosticar este problema.

Enlaces:

- Mensaje de error de la consola Chrome

- jQuery & Los complementos se muestran cargando en la Consola Chrome

LLAMADAS DE ESCRITURA:

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'}] }); 

});
    
pregunta Matt 09.02.2012 - 19:39

2 respuestas

9

Intente cambiar la primera línea de su archivo JS personalizado.

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

jQuery operado dentro de WordPress debe ejecutarse en modo de compatibilidad. Esa línea permite que esto suceda, según el punto # 5 aquí .

    
respondido por el dunc 09.02.2012 - 19:48
6

Primero, si su tema está destinado a ser distribuido públicamente, no cancele el registro de los scripts agrupados en el núcleo y sustitúyalos por los suyos . Esto incluye jQuery, jQuery UI y varios otros scripts .

Segundo, sí: WordPress se ejecuta con jQuery no-conflict, lo que significa que debe tener en cuenta que no hay conflicto en sus scripts. El método recomendado por Codex está aquí :

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

Es probable que estos dos no tengan nada que ver con sus problemas, pero son las mejores prácticas:

  1. Si llama tanto a wp_register_script() como a wp_enqueue_script() en el mismo contexto / función, simplemente omita wp_register_script() y use wp_enqueue_script() .
  2. Enganche en wp_enqueue_scripts , en lugar de init .
respondido por el Chip Bennett 09.02.2012 - 19:48

Lea otras preguntas en las etiquetas