it-swarm.com.ru

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

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

function uw_load_scripts() {
    // De-register the built in jQuery
    wp_deregister_script('jquery');
    // Register the CDN version
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    // Load it in your theme
    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 вообще?

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

15
Johan Dahl

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

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

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

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

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

19
Chip Bennett

Надеюсь, это поможет, посмотрите кодекс для wp_enqueue_scripts для получения дополнительной информации.

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

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

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

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

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

4
Stephen Harris

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

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

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

function bbg_enqueue_scripts() {
    // You should probably do some checking to see what page you're on, so that your
    // script only loads when it needs to
    wp_enqueue_script( 'bbg-scripts', get_stylesheet_directory_url() . '/js/bbg-scripts.js', array( 'jquery' ) );
}
add_action( 'wp_enqueue_scripts', 'bbg_enqueue_scripts' );

Здесь я предполагаю, что вы загружаете скрипты из каталога js в текущем каталоге темы; измените параметр URI, если это не так. Третий параметр array( 'jquery' ) говорит, что bbg-scripts зависит от jquery и поэтому должен быть загружен позже. Смотрите https://codex.wordpress.org/Function_Reference/wp_enqueue_script для более подробной информации.

2
Boone Gorges
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 только в том случае, если она уже существует (чего нет, поэтому не будет, и если это произойдет, это приведет к ошибке)

1
Adam

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

$wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver;
$jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; // fallback, just in case 
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');
0
cjbj