it-swarm.com.ru

Отцепить jQuery от WooCommerce через `functions.php`?

Поэтому я использую плагин http://woothemes.com/woocommerce/ для электронной коммерции, и он регистрирует jQuery локально и конфликтует с моим вызовом jQuery по умолчанию из Google CDN.

Это заняло много времени, но я выделил проблему следующим строкам кода в 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 );
    }

Удаление их отменяет повторяющийся вызов jQuery, который вызывает у меня все мои головные боли. У меня есть следующее в functions.php для удаления jQuery из заголовка, но по какой-то причине оно сохраняется и отказывается уходить! :/Есть идеи, как убить локальный вызов jQuery из functions.php? Что-то не так с моим кодом? :

// 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

На самом деле похоже, что вы называете JQuery неправильным. Вы должны всегда использовать wp_enqueue_script, иначе вы просите о конфликтах. Не называйте это вручную.

Строки, которые вы вставили из WooCommerce, не загружают jquery напрямую - они загружают его, устанавливая зависимости для других скриптов. WordPress обрабатывает все остальное.

Если вы хотите использовать jQuery из CDN, отмените регистрацию и заново зарегистрируйте его в версии CDN. Вместо вставки кода я приведу следующий пример, который объясняет, как:

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

2
Mike Jolley

У меня была похожая проблема, и я наткнулся на эту ветку.

Моя проблема заключалась в том, что WooCommerce 2.0.5 регистрировал jQuery сам, и это нарушало мои собственные сценарии jQuery, создавая конфликт с моим процессом functions.php deregister/register/enqueue.

После нескольких попыток я заметил, что я не включил версию jQuery в свою функцию. После его конкретного добавления проблема была решена.

Вот что делает woocommerce/woocommerce.php (строка 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' );
    }
}

И вот как я переопределить его в моем файле 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');

Надеюсь, что это может помочь кому-то еще :)

2
ChowKaiDeng