Как правильно включить файлы jQuery и JavaScript?

Я делаю это с помощью следующего кода:

function uw_load_scripts() {
    // Отмена регистрации встроенного jQuery
    wp_deregister_script('jquery');
    // Регистрация CDN version
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    // Загрузка новой версии jQuery
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_enqueue_scripts', 'uw_load_scripts' );

Это работает, но я должен сделать это для всех, или для всех, кроме администратора (чтобы бэкэнд использовал версию WordPress?):

if (function_exists('load_my_scripts')) {  
function load_my_scripts() {  
    if (!is_admin()) {  
    wp_deregister_script( 'jquery' );  
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    wp_enqueue_script('jquery');   
    }  
}  
}  
add_action('init', 'load_my_scripts');

Эта версия вообще не работает, я получаю jQuery-версию WordPress, а не Google.

Следовательно, я должен отменить регистрацию jQuery, который включен в WordPress по умолчанию?

Кроме того, как мне добавить мои собственные скрипты правильно? Я думаю, что я должен сделать это также через functions.php, а не в заголовке, как я делаю сейчас, но я не уверен.

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 5
  1. cjbj

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

    $wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver;
    $jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; 
    wp_deregister_script('jquery');
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/'. $jquery_version .'/jquery.min.js', $jquery_version, false );
    wp_enqueue_script('jquery');
    
  2. Boone Gorges

    Отмена регистрации упакованной в WP версии jQuery в пользу вашей может вызвать проблемы, особенно если вы не будете особенно осторожны, чтобы убедиться, что вы меняете версию, на которую указывает, всякий раз, когда WP обновляет свою версию. Это вдвойне касается плагинов, которые должны быть максимально совместимы с WP-версией jQuery.

    Тем не менее, ваша первая версия верна — она подключена к wp_enqueue_scripts . Ваша вторая функция подключена к init , возможно, поэтому она не работает должным образом.

    Добавьте свои собственные сценарии аналогичным образом:

    function bbg_enqueue_scripts() {
        // Вам, вероятно, следует проверить, на какой странице вы находитесь, чтобы ваш скрипт загружался только тогда, когда это необходимо
        wp_enqueue_script( 'bbg-scripts', get_stylesheet_directory_url() . '/js/bbg-scripts.js', array( 'jquery' ) );
    }
    add_action( 'wp_enqueue_scripts', 'bbg_enqueue_scripts' );
    

  3. Adam
    if (function_exists('load_my_scripts')) {  
    function load_my_scripts() {  
        if (!is_admin()) {  
        wp_deregister_script( 'jquery' );  
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
        wp_enqueue_script('jquery');   
        }  
    }  
    }  
    add_action('init', 'load_my_scripts');
    

    Это не будет работать. Я подозреваю, что вы имеете в виду

    if (!function_exists('load_my_scripts')) {
    

    Ваш пример загрузит функцию load_my_scripts только в том случае, если она уже существует (чего не происходит, а если нет, то при этом возникает ошибка)

  4. Stephen Harris

    Надеюсь, это поможет, посмотрите в Кодексе для wp_enqueue_scripts больше информации.

    1. Не используйте init для постановки в очередь . Используйте wp_enqueue_scripts для внешнего интерфейса и admin_enqueue_scripts для стороны администратора. Вы можете использовать init для регистрации скриптов.
    2. Хук wp_enqueue_scripts срабатывает только на фронт-энде (а не на странице входа), поэтому вам не нужно проверять is_admin() .
    3. Если у вас нет особых причин поступать иначе, я бы предложил зарегистрировать и поставить в очередь сценарии, используя functions.php для тем или в плагине:

       function myprefix_load_scripts() {
         // Загрузка скриптов
       }
       add_action( 'wp_enqueue_scripts', 'myprefix_load_scripts' );
      
    4. Если цель состоит в том, чтобы поставить скрипт в очередь при использовании шорткода, вы можете использовать wp_enqueue_script в обратном вызове шорткода, чтобы ставить его в очередь только при необходимости.

    5. Вы не должны перерегистрировать существующий jQuery на стороне администратора. Вы можете что-то сломать: D.

    6. Подключаемые модули не должны перерегистрировать существующий jQuery.

    7. Вы должны взвесить все за и против перерегистрации jQuery. Например, некоторые плагины могут сломаться, если вы зарегистрируете старую версию (возможно, не сейчас, но в будущем …)

  5. Chip Bennett

    Первое практическое правило: не отменяйте регистрацию встроенных в ядро сценариев и не заменяйте их на другие версии , если только вы не уверены, что ни тема, ни плагины, ни само ядро не сломаются из-за изменения версии. На самом деле, если вам абсолютно не нужна альтернативная версия сценария с ядром, просто используйте то, что связано с ядром.

    Во-вторых, я настоятельно рекомендую подключаться к wp_enqueue_scripts для регистрации и постановки в очередь сценариев, а не к init . (Он работает в init , но с точки зрения play-nicely-with-others лучше использовать наиболее семантически правильный хук.)

    В-третьих, для постановки собственных сценариев в очередь вы используете те же методы, что и выше:

    <?php
    function wpse45437_enqueue_scripts() {
        if ( ! is_admin() ) {
            $script_path = get_template_directory_uri() . '/js/';
            wp_enqueue_script( 'wpse45437_slider', $script_path . 'slider.js', array( 'jquery' ) );
            wp_enqueue_script( 'wpse45437_modernizr', $script_path . 'modernizr.js', array( 'jquery' ) );
        }
    }
    add_action( 'wp_enqueue_scripts', 'wpse45437_enqueue_scripts' );
    ?>
    

    Просто добавьте все сценарии, которые вам нужны.

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: