Проблема с загрузкой javascript в нижний колонтитул
Я написал небольшой плагин, в который загрузил следующие скрипты
wp_enqueue_script('jquery', plugins_url('/js/jquery.min.js', __FILE__),'','1.7',true);
wp_enqueue_script('new-cycle', plugins_url('/js/cycle.js', __FILE__),array( 'jquery' ),'1.0',true);
wp_enqueue_script('new-jcarousellite', plugins_url('/js/jcarousellite.js', __FILE__),array( 'jquery' ),'1.0',true);
wp_enqueue_script('new-fancybox', plugins_url('/js/fancybox.js', __FILE__),array( 'jquery' ),'1.0',true);
И у меня также есть код javascript для вызова функций cycle и fancybox (с параметрами/опциями, загруженными из таблиц options и post_meta)
function front_js(){ ?>
<script>
$(document).ready(function(){
$(".video-popup").fancybox();
$(".video_msgs").cycle({speed:'<?php echo get_option("cycle_speed");?>'});
});
</script>
<?php }
Этот код добавляется в нижний колонтитул с помощью add_action('wp_footer', 'front_js');
Теперь мой код javascript загружается раньше всех необходимых сценариев, таких как
<script>
$(document).ready(function(){
$(".video-popup").fancybox();
$(".video_msgs").cycle();
});
</script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/themes/twentyfifteen/js/functions.js?ver=20141212'></script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/plugins/myplugin/js/cycle.js?ver=1.0'></script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/plugins/myplugin/js/jcarousellite.js?ver=1.0'></script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/plugins/myplugin/js/fancybox.js?ver=1.0'></script>
<script type='text/javascript' src='http://localhost/wordpress/wp-content/plugins/myplugin/js/counter.js?ver=1.0'></script>
И выдает ошибку $('...').fancybox()
, а не функцию
Я думаю, это потому, что код загруженный до fancybox.js файл, в котором записана эта функция. Я пытался использовать функции print_scripts, но рекомендуется не использовать это, и wp_enqueue_script
работает только с файлами, не имеющими пользовательского кода javascript.
Есть ли какой-либо способ загрузить мой пользовательский код после загрузки необходимых файлов или любой другой способ решить проблему такого типа.
Это работает, если я загружаю все файлы в заголовок, но затем это увеличивает время загрузки страницы, что также не является хорошим подходом.
2 answers
Попробуйте добавить код в нижний колонтитул, используя add_action('wp_footer', 'front_js', 99);
, где 99 указывает порядок выполнения функций. Теперь он должен быть выполнен после загрузки ваших скриптов.
Вместо того, чтобы вводить код в функцию и подключать его к wp_footer
.
Вы можете сохранить другой файл JS в папке плагина и поставить его в очередь, как и другие сценарии, которые вы поставили в очередь.
ИЛИ
<?php
function front_js() {
if ( wp_script_is( 'jquery', 'done' ) ) {
?>
<script type="text/javascript">
$(document).ready(function(){
$(".video-popup").fancybox();
$(".video_msgs").cycle();
});
</script>
<?php
}
}
add_action( 'wp_footer', 'front_js' );
?>