id = $id; $this->version = $version; $this->assets = apply_filters('metaslider_theme_assets', $assets, $this->id); // store the current instance, to give it global access via MetaSlider_Theme_Base::$themes['theme_id'] self::$themes[$this->id] = $this; $this->init(); } /** * Initialize hooks */ public function init() { // Enqueue assets add_action('metaslider_register_public_styles', array($this, 'enqueue_assets')); // override the arrows markup add_filter('metaslider_flex_slider_parameters', array($this, 'update_parameters'), 99, 3); add_filter('metaslider_responsive_slider_parameters', array($this, 'update_parameters'), 99, 3); add_filter('metaslider_nivo_slider_parameters', array($this, 'update_parameters'), 99, 3); add_filter('metaslider_coin_slider_parameters', array($this, 'update_parameters'), 99, 3); // Pro - override the arrows markup for the filmstrip add_filter('metaslider_flex_slider_filmstrip_parameters', array($this, 'update_parameters'), 99, 3); // Adds classes for thumbnails and filmstrip navigation add_filter('metaslider_css_classes', array($this, 'slider_classes'), 20, 3); } /** * Slider Classes - Filter * * @param string $classes Slider Classes * @param int $slider_id Slider ID * @param array $slider_settings Slider Settings * @return string */ public function slider_classes($classes, $slider_id, $slider_settings) { if (isset($slider_settings['carouselMode']) && 'true' === $slider_settings['carouselMode']) { $classes .= ' has-carousel-mode'; } if ('true' == $slider_settings['navigation']) { $classes .= ' has-dots-nav'; } if ('filmstrip' == $slider_settings['navigation']) { $classes .= ' has-filmstrip-nav'; } return $classes; } /** * Enqueues theme specific styles and scripts */ public function enqueue_assets() { foreach ($this->assets as $asset) { if ('css' == $asset['type']) { wp_enqueue_style('metaslider_' . $this->id . '_theme_styles', METASLIDER_THEMES_URL . $this->id . $asset['file'], isset($asset['dependencies']) ? $asset['dependencies'] : array(), $this->version); } if ('js' == $asset['type']) { wp_enqueue_script('metaslider_' . $this->id . '_theme_script', METASLIDER_THEMES_URL . $this->id . $asset['file'], isset($asset['dependencies']) ? $asset['dependencies'] : array(), $this->version, isset($asset['in_footer']) ? $asset['in_footer'] : true); } } } /** * Adds parameters for this theme. Used mainly for changing the Arrows text + icons * * @param array $options The slider plugin options * @param int|string $slideshow_id The slideshow options * @param array $settings The slideshow settings */ public function update_parameters($options, $slideshow_id, $settings) { $theme_id = false; if (!$this->slider_parameters) { return $options; } // if preview if (isset($_REQUEST['action']) && 'ms_get_preview' == $_REQUEST['action']) { if (isset($_REQUEST['theme_id'])) { $theme_id = sanitize_text_field($_REQUEST['theme_id']); } } // only fetch the saved theme if the preview theme isn't set if (!$theme_id) { $theme = get_post_meta($slideshow_id, 'metaslider_slideshow_theme', true); if (isset($theme['folder'])) { $theme_id = $theme['folder']; } } if ($this->id == $theme_id) { return array_merge($options, apply_filters('metaslider_theme_' . $this->id . '_slider_parameters', $this->slider_parameters)); } return $options; } /** * Add manual controls to this theme * * @param array $html - The flexslider options * @param string $slideshow_id - the id of the slideshow * @param array $settings - the id of the slideshow * * @return array */ public function add_title_to_replace_dots($html, $slideshow_id, $settings) { // Only do this on this theme $theme = get_post_meta($slideshow_id, 'metaslider_slideshow_theme', true); if ($this->id !== $theme['folder']) { return $html; } // We want to insert this after the closing ul but before the container div $nav = ""; // Only enable this for dots nav if ('true' === $settings['navigation'] && 'false' === $settings['carouselMode']) { $nav .= "
"; } return str_replace('', $nav, $html); } /** * Copy the query from ml-slider * * @param int $slideshow_id - the id of the slideshow * @return WP_Query */ private function get_slides($slideshow_id) { $settings = get_post_meta($slideshow_id, 'ml-slider_settings', true); $args = array( 'force_no_custom_order' => true, 'orderby' => 'menu_order', 'order' => 'ASC', 'post_type' => array('attachment', 'ml-slide'), 'post_status' => array('inherit', 'publish'), 'lang' => '', // polylang, ingore language filter 'suppress_filters' => 1, // wpml, ignore language filter 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'ml-slider', 'field' => 'slug', 'terms' => $slideshow_id ) ) ); $args = apply_filters('metaslider_populate_slides_args', $args, $slideshow_id, $settings); $slides = get_posts($args); $available_slides = array(); foreach ($slides as $slide) { $type = get_post_meta($slide->ID, 'ml-slider_type', true); $type = $type ? $type : 'image'; // Default ot image // If this filter exists, that means the slide type is available (i.e. pro slides) if (has_filter("metaslider_get_{$type}_slide")) { array_push($available_slides, $slide); } } return $available_slides; } }