first commit
This commit is contained in:
220
wp-content/plugins/elementor-addon/widgets/custom-slider.php
Normal file
220
wp-content/plugins/elementor-addon/widgets/custom-slider.php
Normal file
@@ -0,0 +1,220 @@
|
||||
<?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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user