WordPress : Décrocher jQuery de WooCommerce via `functions.php` ?

Publié par Jean-Michel le

J’utilise donc le plugin http://woothemes.com/woocommerce/ pour le commerce électronique et il enregistre jQuery local et est en conflit avec mon appel jQuery par défaut de Google CDN.

Cela a pris beaucoup de temps mais j’ai isolé le problème dans les lignes de code suivantes dans woocommerce.php:

    $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
    $lightbox_en = (get_option('woocommerce_enable_lightbox')=='yes') ? true : false;
    $chosen_en = (get_option('woocommerce_enable_chosen')=='yes') ? true : false;
    $jquery_ui_en = (get_option('woocommerce_enable_jquery_ui')=='yes') ? true : false;
    $scripts_position = (get_option('woocommerce_scripts_position') == 'yes') ? true : false;

    // Woocommerce.min.js is minified and contains woocommerce_plugins
    wp_enqueue_script( 'woocommerce', $this->plugin_url() . '/assets/js/woocommerce'.$suffix.'.js', array('jquery'), '1.0', $scripts_position );
    if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
        wp_enqueue_script( 'woocommerce_plugins', $this->plugin_url() . '/assets/js/woocommerce_plugins'.$suffix.'.js', array('jquery'), '1.0', $scripts_position );
    }

Les supprimer annule l’appel jQuery en double qui me cause tous mes maux de tête. J’ai ce qui suit functions.phppour retirer jQuery de l’en-tête, mais pour une raison quelconque, il persiste et refuse de disparaître ! :/ Des idées sur la façon de tuer l’appel jQuery local de l’intérieur functions.php? Y a-t-il quelque chose qui ne va pas avec mon code ? :

// dequeue jquery from header

function theme_slug_dequeue_header_jquery() {
     wp_dequeue_script( 'jquery' );
}
add_action( 'wp_header', 'theme_slug_dequeue_header_jquery', 11 );

Solution n°1 trouvée

J’avais un problème similaire et je suis tombé sur ce fil.

Mon problème était que WooCommerce 2.0.5 enregistrait jQuery par lui-même et cela cassait mes propres scripts jQuery, créant un conflit avec mon processus functions.php deregister/register/enqueue.

Après plusieurs tentatives, j’ai remarqué que je n’incluais pas la version jQuery dans ma fonction. Après l’avoir spécifiquement ajouté, le problème a été résolu.

Voici ce que fait woocommerce/woocommerce.php (ligne 1214) :

public function check_jquery() {
    global $wp_scripts;

    // Enforce minimum version of jQuery
    if ( isset( $wp_scripts->registered['jquery']->ver ) && $wp_scripts->registered['jquery']->ver < '1.7' ) {
        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.7' );
        wp_enqueue_script( 'jquery' );
    }
}

Et c’est ainsi que je le remplace dans mon fichier functions.php

function my_scripts_method() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 
        'jquery', 
        'http://code.jquery.com/jquery.js',
        false, 
        '1.9.1' // IMPORTANT: declare jQuery version
        );
    wp_enqueue_script( 'jquery' );
}  

add_action('wp_enqueue_scripts', 'my_scripts_method');

J’espère que cela pourra aider quelqu’un d’autre 🙂

Solution n°2 trouvée

En fait, il semble que votre appel jquery soit erroné. Vous devez toujours utiliser wp_enqueue_script, sinon vous demandez des conflits. Ne l’appelez pas manuellement.

Les lignes que vous avez collées à partir de WooCommerce ne chargent pas directement jquery – elles le chargent en définissant les dépendances pour les autres scripts. WordPress s’occupe du reste.

Si vous souhaitez utiliser jQuery à partir d’un CDN, désenregistrez-le et réenregistrez-le avec la version CDN. Plutôt que de vous coller le code je vais vous diriger vers l’exemple suivant qui explique comment :

http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *