Проблема с загрузкой 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.

Есть ли какой-либо способ загрузить мой пользовательский код после загрузки необходимых файлов или любой другой способ решить проблему такого типа.

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

Author: Vikram, 2015-05-06

2 answers

Попробуйте добавить код в нижний колонтитул, используя add_action('wp_footer', 'front_js', 99);, где 99 указывает порядок выполнения функций. Теперь он должен быть выполнен после загрузки ваших скриптов.

 2
Author: Stefan, 2015-05-06 05:49:23

Вместо того, чтобы вводить код в функцию и подключать его к 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' );
?> 
 0
Author: Abhishek Deshpande, 2015-05-06 06:36:59