web-dev-qa-db-fra.com

Wordpress Enqueue Script Chaos (jQuery & Foundation.js)

Je travaille sur un thème depuis deux jours et je me suis heurté à un mur. Alors que j'avais initialement inclus foundation.js en tant que script de mise en file d'attente, je ne me souvenais pas pourquoi je l'avais ajouté. Aujourd'hui, lorsque j'ai essayé de le supprimer (pour améliorer la vitesse de chargement des pages) de mon fichier functions.php, il a gâché tous mes plugins jQuery.

Après quelques recherches, j'ai découvert que Foundation incluait déjà avec jQuery. J'avais donc chargé deux instances à la fois (j'ai également chargé à partir du dossier js du thème). Donc, maintenant que j'ai supprimé Foundation, mes commandes de fichier custom.js ne fonctionnent que si je préfixe 'jQuery' au lieu du '$' plus simple.

Je pense que certaines parties de mon installation Wordpress ont été corrigées, même si je conserve la référence du nom 'Foundation' avec le fichier jQuery précédemment appelé, le thème fonctionne. C'est comme si elle devait avoir ce nom de "fondation".

Ci-dessous, j'ai inclus mes deux appels de script, ainsi que mon fichier js personnalisé, dans l'espoir que quelqu'un puisse m'aider à diagnostiquer ce problème.

Liens:

- Message d'erreur de la console Chrome

- jQuery & Plugins affichés en cours de chargement dans la console Chrome

APPELS DE SCRIPTS:

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

FICHIER JS PERSONNALISÉ:

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

});
2
Matt

Essayez de changer la première ligne de votre fichier JS personnalisé.

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

jQuery exploité dans WordPress doit être exécuté en mode de compatibilité. Cette ligne permet que cela se produise, comme indiqué au point 5 ici .

9
dunc

Premièrement, si votre thème est destiné à être distribué publiquement, ne désenregistrez pas les scripts fournis avec le noyau et ne les remplacez pas par les vôtres . Cela inclut jQuery, l'interface utilisateur jQuery et plusieurs autres scripts .

Deuxièmement, oui: WordPress fonctionne avec jQuery no-conflict, ce qui signifie que vous devez tenir compte de l'absence de conflit dans vos scripts. La méthode recommandée par le Codex est la suivante :

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

Ces deux problèmes n’ont probablement rien à voir avec vos problèmes, mais constituent une pratique exemplaire:

  1. Si vous appelez wp_register_script() et wp_enqueue_script() dans le même contexte/la même fonction, omettez simplement wp_register_script() et utilisez wp_enqueue_script().
  2. Accrocher dans wp_enqueue_scripts, plutôt que init.
6
Chip Bennett