221 lines
7.9 KiB
PHP
221 lines
7.9 KiB
PHP
<?php
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
use Elementor\Controls_Manager;
|
|
use Elementor\Widget_Base;
|
|
|
|
class Elementor_Custom_Slider extends Widget_Base {
|
|
|
|
public function get_name() {
|
|
return 'custom-slider';
|
|
}
|
|
|
|
public function get_title() {
|
|
return esc_html__( 'Custom Slider', 'elementor-addon' );
|
|
}
|
|
|
|
public function get_icon() {
|
|
return 'eicon-slides';
|
|
}
|
|
|
|
public function get_categories() {
|
|
return [ 'basic' ];
|
|
}
|
|
|
|
public function get_keywords() {
|
|
return [ 'slider', 'custom', 'swiper' ];
|
|
}
|
|
|
|
protected function register_controls() {
|
|
|
|
// ---- Слайди (галерея) ----
|
|
$this->start_controls_section(
|
|
'slides_section',
|
|
[
|
|
'label' => esc_html__( 'Slides', 'elementor-addon' ),
|
|
'tab' => Controls_Manager::TAB_CONTENT,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'slides',
|
|
[
|
|
'label' => esc_html__( 'Images', 'elementor-addon' ),
|
|
'type' => Controls_Manager::GALLERY,
|
|
'default' => [],
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
|
|
// ---- Текстовий блок поверх ----
|
|
$this->start_controls_section(
|
|
'overlay_section',
|
|
[
|
|
'label' => esc_html__( 'Overlay Content', 'elementor-addon' ),
|
|
'tab' => Controls_Manager::TAB_CONTENT,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'overlay_title',
|
|
[
|
|
'label' => esc_html__( 'Title', 'elementor-addon' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'default' => esc_html__( 'Custom Slider Title', 'elementor-addon' ),
|
|
'placeholder' => esc_html__( 'Enter title', 'elementor-addon' ),
|
|
'label_block' => true,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'overlay_text',
|
|
[
|
|
'label' => esc_html__( 'Text', 'elementor-addon' ),
|
|
'type' => Controls_Manager::TEXTAREA,
|
|
'default' => esc_html__( 'Your description goes here.', 'elementor-addon' ),
|
|
'placeholder' => esc_html__( 'Enter description', 'elementor-addon' ),
|
|
'rows' => 3,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'overlay_link',
|
|
[
|
|
'label' => esc_html__( 'Button Link', 'elementor-addon' ),
|
|
'type' => Controls_Manager::URL,
|
|
'placeholder' => 'https://example.com',
|
|
'default' => [
|
|
'url' => '',
|
|
'is_external' => false,
|
|
'nofollow' => false,
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'overlay_link_text',
|
|
[
|
|
'label' => esc_html__( 'Button Text', 'elementor-addon' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'default' => esc_html__( 'Learn more', 'elementor-addon' ),
|
|
'placeholder' => esc_html__( 'Enter button text', 'elementor-addon' ),
|
|
'condition' => [
|
|
'overlay_link[url]!' => '',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
|
|
// ---- Налаштування анімації (необов’язково) ----
|
|
$this->start_controls_section(
|
|
'settings_section',
|
|
[
|
|
'label' => esc_html__( 'Slider Settings', 'elementor-addon' ),
|
|
'tab' => Controls_Manager::TAB_CONTENT,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'autoplay_delay',
|
|
[
|
|
'label' => esc_html__( 'Autoplay Delay (ms)', 'elementor-addon' ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'default' => 4000,
|
|
'min' => 1000,
|
|
'step' => 500,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'transition_speed',
|
|
[
|
|
'label' => esc_html__( 'Transition Speed (ms)', 'elementor-addon' ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'default' => 1200,
|
|
'min' => 200,
|
|
'step' => 100,
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
}
|
|
|
|
protected function render() {
|
|
$settings = $this->get_settings_for_display();
|
|
|
|
if ( empty( $settings['slides'] ) ) {
|
|
return;
|
|
}
|
|
|
|
$slider_id = 'custom-slider-' . $this->get_id();
|
|
|
|
$autoplay_delay = ! empty( $settings['autoplay_delay'] ) ? (int) $settings['autoplay_delay'] : 4000;
|
|
$transition_speed = ! empty( $settings['transition_speed'] ) ? (int) $settings['transition_speed'] : 1200;
|
|
|
|
$overlay_title = ! empty( $settings['overlay_title'] ) ? $settings['overlay_title'] : '';
|
|
$overlay_text = ! empty( $settings['overlay_text'] ) ? $settings['overlay_text'] : '';
|
|
$overlay_link = ! empty( $settings['overlay_link']['url'] ) ? $settings['overlay_link'] : null;
|
|
$overlay_link_text = ! empty( $settings['overlay_link_text'] ) ? $settings['overlay_link_text'] : '';
|
|
|
|
?>
|
|
<div id="<?php echo esc_attr( $slider_id ); ?>"
|
|
class="custom-slider-wrapper"
|
|
data-autoplay-delay="<?php echo esc_attr( $autoplay_delay ); ?>"
|
|
data-transition-speed="<?php echo esc_attr( $transition_speed ); ?>">
|
|
|
|
<div class="swiper custom-slider-swiper">
|
|
<div class="swiper-wrapper">
|
|
<?php foreach ( $settings['slides'] as $item ) :
|
|
$image_url = ! empty( $item['url'] ) ? $item['url'] : '';
|
|
if ( ! $image_url ) {
|
|
continue;
|
|
}
|
|
?>
|
|
<div class="swiper-slide">
|
|
<div class="custom-slider-slide-inner">
|
|
<img src="<?php echo esc_url( $image_url ); ?>"
|
|
alt="<?php echo esc_attr( get_post_meta( $item['id'], '_wp_attachment_image_alt', true ) ); ?>">
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<div class="custom-slider-pagination swiper-pagination"></div>
|
|
</div>
|
|
|
|
<?php if ( $overlay_title || $overlay_text ) : ?>
|
|
<div class="custom-slider-overlay">
|
|
<div class="custom-slider-overlay-inner">
|
|
<?php if ( $overlay_title ) : ?>
|
|
<h2 class="custom-slider-title">
|
|
<?php echo esc_html( $overlay_title ); ?>
|
|
</h2>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( $overlay_text ) : ?>
|
|
<p class="custom-slider-text">
|
|
<?php echo wp_kses_post( $overlay_text ); ?>
|
|
</p>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( $overlay_link && ! empty( $overlay_link['url'] ) ) :
|
|
$target = $overlay_link['is_external'] ? ' target="_blank"' : '';
|
|
$rel = $overlay_link['nofollow'] ? ' rel="nofollow"' : '';
|
|
?>
|
|
<a class="custom-slider-button"
|
|
href="<?php echo esc_url( $overlay_link['url'] ); ?>"<?php echo $target . $rel; ?>>
|
|
<?php echo $overlay_link_text ? esc_html( $overlay_link_text ) : esc_html__( 'Learn more', 'elementor-addon' ); ?>
|
|
</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|