web-dev-qa-db-fra.com

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

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

Cela a pris beaucoup de temps mais j'ai isolé le problème des 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 );
    }

Leur suppression annule l'appel jQuery en double qui me cause tous mes maux de tête. J'ai le code suivant dans functions.php pour retirer jQuery de l'en-tête, mais pour une raison quelconque, il persiste et refuse de partir! :/Des idées sur la manière de tuer l'appel jQuery local à partir de functions.php? Y at-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 );
1
Brian

En fait, il semble que votre appel ait mal tourné. Vous devriez toujours utiliser wp_enqueue_script, sinon vous demandez des conflits. Ne l'appelle pas manuellement.

Les lignes que vous avez collées dans WooCommerce ne chargent pas directement jquery - elles le chargent en définissant les dépendances des autres scripts. WordPress gère le 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 vous dirigerai vers l'exemple suivant qui explique comment:

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

2
Mike Jolley

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 cédait mes propres scripts jQuery, créant un conflit avec mon processus de suppression/enregistrement/mise en file d'attente de functions.php.

Après plusieurs tentatives, j'ai remarqué que je n'incluais pas la version de jQuery dans ma fonction. Après l'ajout spécifique, 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 voici comment 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 pourrait aider quelqu'un d'autre :)

2
ChowKaiDeng