Как интегрировать owl carousel в тему без использования плагина?
Я пытаюсь интегрировать 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.
Заранее спасибо

Вы используете одинаковые идентификаторы (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-окружения.

Я не претендую на звание эксперта по 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. Не знаю — повторюсь, я не эксперт.
Мое решение может быть не самым изящным, но оно сработало в моем случае, и поскольку я не нашел хорошего ответа на этот вопрос, решил поделиться им здесь.

Вам не нужно подключать оба файла 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, который вы можете видеть в примере выше. Надеюсь, это поможет! Удачи в разработке!
