File "widget-post-image.php"
Full Path: /home/bytebmoc/tideswithin.com/wp-content/plugins/themesflat-addons-for-elementor/widgets/widget-post-image.php
File size: 11.2 KB
MIME-type: text/x-php; charset=us-ascii
Charset: utf-8
<?php
class TFPostImage_Widget_Free extends \Elementor\Widget_Base {
public function get_name() {
return 'tfposts-image';
}
public function get_title() {
return esc_html__( 'TF Post Image', 'themesflat-addons-for-elementor' );
}
public function get_icon() {
return 'eicon-featured-image';
}
public function get_categories() {
return [ 'themesflat_addons_single_post' ];
}
protected function register_controls() {
// Start Tab Setting
$this->start_controls_section( 'section_tabs',
[
'label' => esc_html__('Post Image', 'themesflat-addons-for-elementor'),
]
);
$this->add_group_control(
\Elementor\Group_Control_Image_Size::get_type(),
[
'name' => 'thumbnail',
'default' => 'large',
]
);
$this->add_control(
'select_link_to',
[
'label' => esc_html__( 'Link To', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SELECT,
'default' => 'none',
'options' => [
'none' => esc_html__( 'None', 'themesflat-addons-for-elementor' ),
'home' => esc_html__( 'Home URL', 'themesflat-addons-for-elementor' ),
'post' => esc_html__( 'Post URL', 'themesflat-addons-for-elementor' ),
'media' => esc_html__( 'Media URL', 'themesflat-addons-for-elementor' ),
'custom' => esc_html__( 'Custom URL', 'themesflat-addons-for-elementor' ),
],
]
);
$this->add_control(
'link_to',
[
'label' => esc_html__( 'Link', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::URL,
'placeholder' => esc_html__( 'https://your-link.com', 'themesflat-addons-for-elementor' ),
'show_external' => true,
'default' => [
'url' => '',
'is_external' => true,
'nofollow' => true,
],
'condition' => [
'select_link_to' => 'custom',
],
]
);
$this->add_control(
'align',
[
'label' => esc_html__( 'Alignment', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => esc_html__( 'Left', 'themesflat-addons-for-elementor' ),
'icon' => 'eicon-text-align-left',
],
'center' => [
'title' => esc_html__( 'Center', 'themesflat-addons-for-elementor' ),
'icon' => 'eicon-text-align-center',
],
'right' => [
'title' => esc_html__( 'Right', 'themesflat-addons-for-elementor' ),
'icon' => 'eicon-text-align-right',
],
],
'default' => 'center',
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image' => 'text-align: {{VALUE}}',
],
]
);
$this->end_controls_section();
// /.End Tab Setting
// Start Style
$this->start_controls_section( 'section_post_image',
[
'label' => esc_html__( 'Post Image', 'themesflat-addons-for-elementor' ),
'tab' => \Elementor\Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'featured_width',
[
'label' => esc_html__( 'Width', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px', '%', 'vw' ],
'range' => [
'%' => [
'min' => 0,
'max' => 100,
],
'px' => [
'min' => 0,
'max' => 1000,
],
'vw' => [
'min' => 0,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'width: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'featured_max_width',
[
'label' => esc_html__( 'Max Width', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px', '%', 'vw' ],
'range' => [
'%' => [
'min' => 0,
'max' => 100,
],
'px' => [
'min' => 0,
'max' => 1000,
],
'vw' => [
'min' => 0,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'max-width: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'featured_height',
[
'label' => esc_html__( 'Heigth', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px', 'vh' ],
'range' => [
'px' => [
'min' => 0,
'max' => 500,
],
'vh' => [
'min' => 0,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'height: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_control(
'rotate',
[
'label' => esc_html__( 'Rotate', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ '%' ],
'range' => [
'%' => [
'min' => -360,
'max' => 360,
],
],
'default' => [
'unit' => '%',
'size' => 0,
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => '-moz-transform: rotate({{SIZE}}deg); -webkit-transform: rotate( {{SIZE}}deg ); -o-transform: rotate({{SIZE}}deg); -ms-transform: rotate({{SIZE}}deg); transform: rotate( {{SIZE}}deg );',
],
]
);
$this->add_group_control(
\Elementor\Group_Control_Box_Shadow::get_type(),
[
'name' => 'box_shadow',
'label' => esc_html__( 'Box Shadow', 'themesflat-addons-for-elementor' ),
'selector' => '{{WRAPPER}} .tf-post-featured-image img',
]
);
$this->add_group_control(
\Elementor\Group_Control_Border::get_type(),
[
'name' => 'border',
'label' => esc_html__( 'Border', 'themesflat-addons-for-elementor' ),
'selector' => '{{WRAPPER}} .tf-post-featured-image img',
]
);
$this->add_responsive_control(
'border_radius',
[
'label' => esc_html__( 'Border Radius', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::DIMENSIONS,
'size_units' => [ 'px' , '%' ],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->start_controls_tabs( 'image_style_tabs' );
$this->start_controls_tab( 'image_style_normal_tab',
[
'label' => esc_html__( 'Normal', 'themesflat-addons-for-elementor' ),
] );
$this->add_control(
'opacity',
[
'label' => esc_html__( 'Opacity', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
'step' => 0.1,
],
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'opacity: {{SIZE}}%;',
],
]
);
$this->add_group_control(
\Elementor\Group_Control_Css_Filter::get_type(),
[
'name' => 'css_filter',
'label' => esc_html__( 'CSS Filters', 'themesflat-addons-for-elementor' ),
'selector' => '{{WRAPPER}} .tf-post-featured-image img',
]
);
$this->end_controls_tab();
$this->start_controls_tab( 'image_style_hover_tab',
[
'label' => esc_html__( 'Hover', 'themesflat-addons-for-elementor' ),
] );
$this->add_control(
'opacity_hover',
[
'label' => esc_html__( 'Opacity', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
'step' => 0.1,
],
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img:hover' => 'opacity: {{SIZE}}%;',
],
]
);
$this->add_group_control(
\Elementor\Group_Control_Css_Filter::get_type(),
[
'name' => 'css_filter_hover',
'label' => esc_html__( 'CSS Filters', 'themesflat-addons-for-elementor' ),
'selector' => '{{WRAPPER}} .tf-post-featured-image img:hover',
]
);
$this->add_control(
'transition_duration',
[
'label' => esc_html__( 'Transition Duration', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::SLIDER,
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 3,
'step' => 0.1,
],
],
'default' => [
'unit' => 'px',
'size' => 0.3,
],
'selectors' => [
'{{WRAPPER}} .tf-post-featured-image img' => 'transition-duration: {{SIZE}}s;',
],
]
);
$this->add_control(
'hover_animation',
[
'label' => esc_html__( 'Hover Animation', 'themesflat-addons-for-elementor' ),
'type' => \Elementor\Controls_Manager::HOVER_ANIMATION,
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->end_controls_section();
// /.End Style
}
protected function render($instance = []) {
$settings = $this->get_settings_for_display();
$this->add_render_attribute( 'tf_post_featured_image_wrapper', ['id' => "tf-post-featured-image-{$this->get_id()}", 'class' => ['tf-post-featured-image'], 'data-tabid' => $this->get_id()] );
$content = '';
$get_post_thumbnail = get_post_thumbnail_id();
$image = '<img src="'.\Elementor\Group_Control_Image_Size::get_attachment_image_src( $get_post_thumbnail, 'thumbnail', $settings ).'" alt="image">';
switch ( $settings['select_link_to'] ) {
case 'home':
$content = sprintf( '<a href="%1$s">%2$s</a>', esc_url( get_home_url() ), $image );
break;
case 'post':
$content = sprintf( '<a href="%1$s">%2$s</a>', esc_url( get_the_permalink() ), $image );
break;
case 'media':
$content = sprintf( '<a href="%1$s">%2$s</a>', esc_url( get_the_post_thumbnail_url() ), $image );
break;
case 'custom':
$target = $settings['link_to']['is_external'] ? ' target="_blank"' : '';
$nofollow = $settings['link_to']['nofollow'] ? ' rel="nofollow"' : '';
$content = sprintf( '<a href="%1$s" %2$s %3$s>%4$s</a>', esc_url( $settings['link_to']['url'] ), esc_attr($target), esc_attr($nofollow), $image );
break;
default:
$content = $image;
break;
}
$animation = ! empty( $settings['hover_animation'] ) ? 'elementor-animation-' . esc_attr( $settings['hover_animation'] ) : '';
echo sprintf (
'<div %1$s>
<div class="post-featured-image %3$s">
%2$s
<div>
</div>',
$this->get_render_attribute_string('tf_post_featured_image_wrapper'),
$content,
$animation
);
}
}