Правильный способ запуска скриптов с зависимостями без использования enqueue?

18 июл. 2014 г., 03:38:26
Просмотры: 16.1K
Голосов: 9

При использовании enqueue вы указываете $deps для вашего скрипта или массив скриптов, которые должны быть загружены первыми для корректной работы вашего скрипта.

<?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

Например:

function script_that_requires_jquery() {
    wp_register_script( 'script-with-dependency', 'http://www.example.com/script-with-dependency.js', array( 'jquery' ), '1.0.0', true );
    wp_enqueue_script( 'script-with-dependency' );
}
add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery' );

Обычно я делаю так, но это не всегда работает:

function script_that_requires_jquery(){
    if ( wp_script_is( 'jquery', 'done' ) ) { ?>
        <script type="text/javascript">
        (function($) {
            // здесь идет функция jQuery    
        })( jQuery );
        </script>
    <?php }
}
add_action('wp_footer', 'script_that_requires_jquery');

Может быть, вот так?

function script_that_requires_jquery(){
    wp_enqueue_script( 'jquery' );
    ?>
        <script type="text/javascript">
        (function($) {
            // здесь идет функция jQuery    
        })( jQuery );
        </script>
    <?php 
}
add_action('wp_footer', 'script_that_requires_jquery');
0
Все ответы на вопрос 2
0
function script_that_requires_jquery() {
    wp_register_script( 'script-with-dependency', 'http://www.example.com/script-with-dependency.js', array( 'jquery' ), '1.0.0', true );
    wp_enqueue_script( 'script-with-dependency' );
}
add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery' );

Это правильный метод подключения скриптов (и стилей тоже). Вы всегда должны использовать хук wp_enqueue_scripts для подключения скриптов и стилей.

Есть несколько моментов, на которые нужно обратить внимание при регистрации скриптов и стилей. Во-первых, убедитесь, что порядок, в котором вы размещаете их внутри функции, правильный. Первый скрипт в функции будет выполняться первым, второй - вторым и т.д. Таким образом, вы не можете разместить скрипт, зависящий от jQuery, до jQuery - это не сработает.

Еще одна потенциальная проблема - это add_action( $hook, $function_to_add, $priority, $accepted_args );. Без установки параметра $priority всегда есть риск, что ваш скрипт/стиль будет загружен до других скриптов/стилей, которые могут перезаписать ваши.

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

add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery', 999 );
18 июл. 2014 г. 07:37:29
0

Недостаточно просто подключить jQuery (или любую другую библиотеку) перед кодом, который от неё зависит. Также необходимо убедиться, что jQuery загружается до того, как браузер начнёт анализировать и выполнять ваш код.

18 июл. 2014 г. 14:04:32