Как интегрировать owl carousel в тему без использования плагина?

6 мар. 2015 г., 11:32:00
Просмотры: 43.3K
Голосов: 2

Я пытаюсь интегрировать owl.carousel в мою тему, но не могу заставить его работать. Инструкции на странице не предназначены для WordPress, поэтому мне нужна помощь с правильным подключением необходимых файлов и вызовом (инициализацией) карусели.

Я добавил следующие файлы в директорию моей темы, расположенную в MyTheme/inc/owl/

  • AjaxLoader.gif
  • grabbing.png
  • owl.carousel.css
  • owl.carousel.js
  • owl.carousel.min.js
  • owl.carouselinit.js -> Это "функция инициализации Owl"
  • owl.theme.css
  • owl.transitions.css

В моем файле functions.php я подключаю необходимые файлы:

/*-------------------------------------------------------------------------------
Добавление Owl Carousel
-------------------------------------------------------------------------------*/

// Подключение скриптов/стилей для owl.carousel.2
function agencyclix_add_owlcarousel() {
wp_enqueue_script ( 'jquery' );
wp_enqueue_script( 'owlcarousel', get_template_directory_uri() . '/inc/owl/owl.carousel.js', array( 'jquery' ), false, true );
wp_enqueue_script( 'owlcarousel', get_template_directory_uri() . '/inc/owl/owl.carousel.min.js', array( 'jquery' ), false, true );
wp_enqueue_script( 'owl-carousel', get_template_directory_uri() . '/inc/owl/owl.carousel-init.js', array( 'jquery' ), false, true );
wp_enqueue_style( 'owlcarousel-style', get_template_directory_uri() . '/inc/owl/owl.carousel.css' );
wp_enqueue_style( 'owlcarousel-style', get_template_directory_uri() . '/inc/owl/owl.theme.css' );
wp_enqueue_style( 'owlcarousel-style', get_template_directory_uri() . '/inc/owl/owl.transitions.css' );
}
add_action( 'wp_enqueue_scripts', 'agencyclix_add_owlcarousel' );

В файле "owl.carouselinit.js" я просто добавил функцию инициализации, указанную на веб-сайте:

$(document).ready(function(){
$('.owl-carousel').owlCarousel();
});

Также я посмотрел некоторые плагины, которые используют owl carousel, и похоже, что они используют (подключают) только 3 файла для работы owl carousel.

Заранее спасибо

0
Все ответы на вопрос 3
0

Вы используете одинаковые идентификаторы (handles) для скриптов и стилей. Они должны быть уникальными (см. справочник WP Codex).

Это должно выглядеть примерно так:

// Подключаем основной скрипт Owl Carousel
wp_enqueue_script( 'owlcarousel', get_template_directory_uri() . '/inc/owl/owl.carousel.min.js', array( 'jquery' ), false, true );
// Подключаем скрипт инициализации
wp_enqueue_script( 'owlcarousel-init', get_template_directory_uri() . '/inc/owl/owl.carousel-init.js', array( 'jquery' ), false, true );
// Подключаем основные стили
wp_enqueue_style( 'owlcarousel-style', get_template_directory_uri() . '/inc/owl/owl.carousel.css' );
// Подключаем тему
wp_enqueue_style( 'owlcarousel-theme', get_template_directory_uri() . '/inc/owl/owl.theme.css' );
// Подключаем стили переходов
wp_enqueue_style( 'owlcarousel-transitions', get_template_directory_uri() . '/inc/owl/owl.transitions.css' );

Нет необходимости подключать одновременно owl.carousel.js и .min.js. По функционалу эти файлы идентичны. Версия .js содержит полный код, который используется в разработке, а .min.js - минифицированная версия с оптимизированным размером файла для production-окружения.

5 нояб. 2016 г. 21:46:37
2

Я не претендую на звание эксперта по WP (и не стремлюсь им быть), но у меня была та же проблема с подключением Owl Carousel на сайте клиента, и я нашел не самое элегантное решение.

Во-первых, как правильно заметил steamfunk, WordPress требует использовать jQuery вместо $ для всех jQuery-скриптов.

Моя инициализация выглядела примерно так:

jQuery(function() {
    jQuery('.owl-carousel').owlCarousel()
})

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

Его все равно можно разместить в футере, просто выводить условно:

<?php if(is_page('name_of_page')): ?>
    <script>
        // Ваш код инициализации
    </script>
<?php endif ?> 

Owl Carousel — единственный плагин, с которым у меня возникли проблемы при использовании "правильного" подхода WordPress. Возможно, это проблема самого Owl Carousel. Не знаю — повторюсь, я не эксперт.

Мое решение может быть не самым изящным, но оно сработало в моем случае, и поскольку я не нашел хорошего ответа на этот вопрос, решил поделиться им здесь.

5 нояб. 2016 г. 21:16:06
Комментарии

Вы можете просто написать jQuery(function($) { $('.owl-carousel').owlCarousel()});

fuxia fuxia
5 нояб. 2016 г. 21:39:57

О, отлично! Я об этом не подумал

Dan Fletcher Dan Fletcher
30 дек. 2016 г. 21:03:37
0
-1

Вам не нужно подключать оба файла owl.carousel.js и owl.carousel.min.js - достаточно только минифицированной версии. Кроме того, WordPress требует оборачивать любой jQuery-код в обёртку для избежания конфликтов имен. Этот код должен находиться в файле owl.carousel-init.js, поскольку именно он подключен в вашем случае. Из вашего примера видно, что файл "owl.carouselinit.js" не был подключен. Взгляните ниже, как должен выглядеть код инициализации Owl Carousel в обёртке без конфликтов:

jQuery(document).ready(function ($) {

  $("#custom-carousel").owlCarousel({

    navigation: true, // Показать кнопки "следующий" и "предыдущий"

    navigationText: [
      "<i class='fa fa-chevron-left icon-white'></i>",
      "<i class='fa fa-chevron-right icon-white'></i>"
    ],

    // pagination : false,
    // paginationNumbers: false,

    slideSpeed: 300,
    paginationSpeed: 400,

    items: 3,
    itemsCustom: false,
    itemsDesktop: [1199, 3],
    itemsDesktopSmall: [980, 3],
    itemsTablet: [768, 3],
    itemsTabletSmall: true,
    itemsMobile: [415, 2],
    singleItem: false,
    itemsScaleUp: false

  });
});

Как видите, Owl Carousel требует использования ID div-элемента, а не класса. Это класс .owl-carousel и ID #owl-carousel. Насколько я понимаю, Owl Carousel требует использования кастомного ID вроде #custom-carousel, который вы можете видеть в примере выше. Надеюсь, это поможет! Удачи в разработке!

6 мар. 2016 г. 23:15:46