web-dev-qa-db-fra.com

Faire fonctionner jQuery avec un thème personnalisé

J'essaie de faire en sorte que certains plugins jQuery fonctionnent avec mon thème personnalisé.

Jusqu'à présent, je faisais ceci:

function my_scripts_method() {
  wp_deregister_script( 'jquery' );
  wp_register_script( 'jquery',    'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');
  wp_enqueue_script( 'jquery' );
}    

if (!is_admin()) add_action('wp_enqueue_scripts', 'my_scripts_method');

Mais j'ai lu, il ne faut pas désenregistrer les scripts fournis et les remplacer par d'autres versions. J'ai donc supprimé cela de mon fichier de fonctions.

Le problème est que maintenant que j'ai abandonné cela, aucun de mes scripts jquery ne fonctionne. Par exemple, mon curseur d'image. J'appelle leurs scripts comme suit:

// Enqueue Nivo Slider
function maglite_add_nivo() {
    wp_enqueue_script( 'nivoslider', get_template_directory_uri() . '/js/jquery.nivo.slider.pack.js', array( 'jquery' ), false, true );
}
add_action( 'wp_enqueue_scripts', 'maglite_add_nivo' );

Cela ne fonctionne tout simplement pas maintenant, je suppose que cela a quelque chose à voir avec le fait que jquery ne s'initialise pas ou quelque chose du genre.

Je reçois des erreurs de type dans ma console, liées au curseur nivo que j'ajoute. Plus précisément cette ligne: $(window).load(function() { la console dit:

TypeError: 'undefined' is not a function (evaluating '$(window)')

J'ai l'impression qu'il me manque une étape essentielle pour inclure des scripts personnalisés nécessitant jquery. Devrais-je toujours mettre en file d'attente jquery ou dois-je ne rien faire avec jquery et mise en file d'attente?

2
Jacob

Selon les commentaires, ce type d'erreur est dû au fait que WordPress charge jquery en mode sans conflit . La solution la plus courante consiste à envelopper toutes les fonctions dans votre fichier de script:

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

Une autre option plus risquée consiste à désactiver le mode non-conflit en démarrant le fichier de script avec ceci:

$ = jQuery.noConflict();
2
cjbj