first commit

This commit is contained in:
Roman Pyrih
2026-04-21 15:48:41 +02:00
commit 7483681901
10216 changed files with 3236626 additions and 0 deletions

View 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
}
}