Helix_Website/wp-content/plugins/attesa-extra/elementor/widgets/posts-carousel.php

623 lines
16 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use Elementor\Controls_Manager;
use Elementor\Scheme_Color;
use Elementor\Widget_Base;
use Elementor\Group_Control_Typography;
use Elementor\Scheme_Typography;
class Attesa_Extra_Posts_Carousel extends Widget_Base {
public function get_name() {
return 'attesa-extra-posts';
}
public function get_title() {
return __( 'Blog Posts Grid', 'attesa-extra' );
}
public function get_icon() {
return 'awp-icon eicon-posts-grid';
}
public function get_categories() {
return [ 'attesa-elements' ];
}
protected function _register_controls() {
$this->start_controls_section(
'section_query_blog',
[
'label' => __( 'Query', 'attesa-extra' ),
]
);
$this->add_control(
'number',
[
'label' => __( 'Number of posts', 'attesa-extra' ),
'type' => Controls_Manager::NUMBER,
'default' => 4,
]
);
$this->add_control(
'ignore_sticky_posts',
[
'label' => __( 'Ignore sticky posts', 'attesa-extra' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'On', 'attesa-extra' ),
'label_off' => __( 'Off', 'attesa-extra' ),
'return_value' => 'true',
'default' => 'false',
]
);
$this->add_control(
'per_row',
[
'label' => __( 'Columns', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => '3',
'options' => [
'1' => __( '1', 'attesa-extra' ),
'2' => __( '2', 'attesa-extra' ),
'3' => __( '3', 'attesa-extra' ),
'4' => __( '4', 'attesa-extra' ),
'5' => __( '5', 'attesa-extra' ),
],
]
);
$this->add_control(
'order_by',
[
'label' => __( 'Order by', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'date',
'options' => [
'date' => __( 'Date', 'attesa-extra' ),
'rand' => __( 'Random', 'attesa-extra' ),
'comment_count' => __( 'Number of comments', 'attesa-extra' ),
],
]
);
$this->add_control(
'category',
[
'label' => __( 'Categories', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'options' => $this->get_cats(),
'default' => 'all',
]
);
$this->add_control(
'show_images',
[
'label' => __( 'Show featured images (if exists)', 'attesa-extra' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'On', 'attesa-extra' ),
'label_off' => __( 'Off', 'attesa-extra' ),
'return_value' => 'yes',
'default' => 'yes',
]
);
$this->add_control(
'show_meta',
[
'label' => __( 'Show Meta', 'attesa-extra' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'On', 'attesa-extra' ),
'label_off' => __( 'Off', 'attesa-extra' ),
'return_value' => 'yes',
'default' => 'no',
]
);
$this->add_control(
'author',
[
'label' => __( 'Author Meta', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'true',
'options' => [
'true' => __( 'Show', 'attesa-extra' ),
'false' => __( 'Hide', 'attesa-extra' ),
],
'condition' => [
'show_meta' => 'yes',
],
]
);
$this->add_control(
'date',
[
'label' => __( 'Date Meta', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'true',
'options' => [
'true' => __( 'Show', 'attesa-extra' ),
'false' => __( 'Hide', 'attesa-extra' ),
],
'condition' => [
'show_meta' => 'yes',
],
]
);
$this->add_control(
'comments',
[
'label' => __( 'Comments Meta', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'true',
'options' => [
'true' => __( 'Show', 'attesa-extra' ),
'false' => __( 'Hide', 'attesa-extra' ),
],
'condition' => [
'show_meta' => 'yes',
],
]
);
$this->add_control(
'show_categories',
[
'label' => __( 'Show Categories', 'attesa-extra' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'On', 'attesa-extra' ),
'label_off' => __( 'Off', 'attesa-extra' ),
'return_value' => 'yes',
'default' => 'no',
]
);
$this->add_control(
'show_limit',
[
'label' => __( 'Show Excerpt', 'attesa-extra' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'On', 'attesa-extra' ),
'label_off' => __( 'Off', 'attesa-extra' ),
'return_value' => 'yes',
'default' => 'no',
]
);
$this->add_control(
'limit',
[
'label' => __( 'Excerpt length', 'attesa-extra' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 20,
],
'range' => [
'ms' => [
'min' => 0,
'max' => 100,
'step' => 1,
],
],
'condition' => [
'show_limit' => 'yes',
],
]
);
$this->add_control(
'image_size',
[
'label' => __( 'Image Size', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'attesa-small',
'options' => [
'medium_large' => __( 'Medium Large (768 x infinite height)', 'attesa-extra' ),
'large' => __( 'Large (1024 x 1024px)', 'attesa-extra' ),
'attesa-small' => __( 'Medium Small (500 x 270px)', 'attesa-extra' ),
'thumbnail' => __( 'Thumbnail (150 x 150px)', 'attesa-extra' ),
'full' => __( 'Original image size', 'attesa-extra' ),
],
]
);
$this->add_control(
'view',
[
'label' => __( 'View', 'attesa-extra' ),
'type' => Controls_Manager::HIDDEN,
'default' => 'traditional',
]
);
$this->end_controls_section();
//Post titles styles
$this->start_controls_section(
'section_post_title_style',
[
'label' => __( 'Post title', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'name_color',
[
'label' => __( 'Color', 'attesa-extra' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .latest-news-wrapper article .attesa-extra-elementor-blog-title a' => 'color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'post_title_typography',
'selector' => '{{WRAPPER}} .latest-news-wrapper article .attesa-extra-elementor-blog-title',
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
]
);
$this->add_control(
'html_tag',
[
'label' => __( 'HTML Tag', 'attesa-extra' ),
'type' => Controls_Manager::SELECT,
'default' => 'h4',
'options' => [
'h2' => __( 'H2', 'attesa-extra' ),
'h3' => __( 'H3', 'attesa-extra' ),
'h4' => __( 'H4', 'attesa-extra' ),
'h5' => __( 'H5', 'attesa-extra' ),
'h6' => __( 'H6', 'attesa-extra' ),
'div' => __( 'div', 'attesa-extra' ),
'span' => __( 'span', 'attesa-extra' ),
'p' => __( 'p', 'attesa-extra' ),
],
]
);
$this->end_controls_section();
//End post titles styles
//Content styles
$this->start_controls_section(
'section_content_style',
[
'label' => __( 'Post content', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'content_color',
[
'label' => __( 'Color', 'attesa-extra' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .latest-news-wrapper article .post-excerpt,{{WRAPPER}} .latest-news-wrapper article .elementor-cat-links' => 'color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'content_typography',
'selector' => '{{WRAPPER}} .latest-news-wrapper article .post-excerpt',
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
]
);
$this->end_controls_section();
//End content styles
//Categories styles
$this->start_controls_section(
'section_categories_style',
[
'label' => __( 'Categories content', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'categories_color',
[
'label' => __( 'Color', 'attesa-extra' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .latest-news-wrapper article .elementor-cat-links a' => 'color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'categories_typography',
'selector' => '{{WRAPPER}} .latest-news-wrapper article .elementor-cat-links',
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
]
);
$this->end_controls_section();
//End categories styles
//Meta styles
$this->start_controls_section(
'section_meta_style',
[
'label' => __( 'Meta content', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'meta_color',
[
'label' => __( 'Color', 'attesa-extra' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .awp-blog-grid-meta a, .awp-blog-grid-meta' => 'color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'meta_typography',
'selector' => '.awp-blog-grid-meta',
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
]
);
$this->end_controls_section();
//End meta styles
//Post spacing
$this->start_controls_section(
'section_post_spacing',
[
'label' => __( 'Post spacing', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'post_spacing',
[
'label' => __( 'Spacing', 'attesa-extra' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em' ],
'desktop_default' => [
'top' => 15,
'right' => 15,
'bottom' => 15,
'left' => 15,
'unit' => 'px',
'isLinked' => true,
],
'tablet_default' => [
'top' => 15,
'right' => 10,
'bottom' => 15,
'left' => 10,
'unit' => 'px',
'isLinked' => false,
],
'mobile_default' => [
'top' => 10,
'right' => 0,
'bottom' => 10,
'left' => 0,
'unit' => 'px',
'isLinked' => false,
],
'selectors' => [
'{{WRAPPER}} .attesa-extra-blog-posts-elementor article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
//End post spacing
//Post spacing
$this->start_controls_section(
'section_image_border_radius',
[
'label' => __( 'Images Border Radius', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'border_radius',
[
'label' => __( 'Border Radius', 'attesa-extra' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'desktop_default' => [
'top' => 5,
'right' => 5,
'bottom' => 5,
'left' => 5,
'unit' => 'px',
'isLinked' => true,
],
'tablet_default' => [
'top' => 5,
'right' => 5,
'bottom' => 5,
'left' => 5,
'unit' => 'px',
'isLinked' => true,
],
'mobile_default' => [
'top' => 5,
'right' => 5,
'bottom' => 5,
'left' => 5,
'unit' => 'px',
'isLinked' => true,
],
'selectors' => [
'{{WRAPPER}} .attesa-extra-blog-posts-elementor article .entry-thumb img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
//End post spacing
//Alignment
$this->start_controls_section(
'section_alignment',
[
'label' => __( 'Text Alignment', 'attesa-extra' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'text-align',
[
'label' => __( 'Alignment', 'attesa-extra' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => __( 'Left', 'attesa-extra' ),
'icon' => 'fa fa-align-left',
],
'center' => [
'title' => __( 'Center', 'attesa-extra' ),
'icon' => 'fa fa-align-center',
],
'right' => [
'title' => __( 'Right', 'attesa-extra' ),
'icon' => 'fa fa-align-right',
],
'justify' => [
'title' => __( 'Justify', 'attesa-extra' ),
'icon' => 'fa fa-align-justify',
],
],
'default' => 'center',
'toggle' => true,
'selectors' => [
'{{WRAPPER}} .attesa-extra-blog-posts-elementor article' => 'text-align: {{VALUE}};',
],
]
);
$this->end_controls_section();
//End alignment
}
protected function get_cats() {
$all = array(
'all' => 'All Categories'
);
$args = array( 'hide_empty' => false );
$terms = get_terms('category',$args);
foreach ( $terms as $term => $key ) {
$all[$key->term_id] = $key->name;
}
return $all;
}
protected function render() {
$settings = $this->get_settings();
$show_images = $settings['show_images'];
$show_categories = $settings['show_categories'];
$show_meta = $settings['show_meta'];
$show_limit = $settings['show_limit'];
$limit = $settings['limit']['size'];
$per_row = $settings['per_row'];
$image_size = $settings['image_size'];
$tag = $settings['html_tag'];
if ($settings['category'] == 'all') {
$r = new \WP_Query( array(
'no_found_rows' => true,
'post_status' => 'publish',
'orderby' => $settings['order_by'],
'posts_per_page' => $settings['number'],
'ignore_sticky_posts' => $settings['ignore_sticky_posts']
) );
} else {
$r = new \WP_Query( array(
'no_found_rows' => true,
'post_status' => 'publish',
'cat' => $settings['category'],
'orderby' => $settings['order_by'],
'posts_per_page' => $settings['number'],
'ignore_sticky_posts' => $settings['ignore_sticky_posts']
) );
}
if ( $r->have_posts() ) :
?>
<div class="attesa-extra-blog-posts-elementor number-columns-<?php echo absint( $per_row ); ?>">
<div class="latest-news-wrapper">
<?php while ( $r->have_posts() ) : $r->the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php if ( '' != get_the_post_thumbnail() && $show_images == 'yes' ) : ?>
<div class="entry-thumb"><a href="<?php echo esc_url(get_permalink()); ?>">
<?php echo get_the_post_thumbnail(get_the_ID() ,esc_attr($image_size)); ?>
</a></div>
<?php endif; ?>
<?php if ($show_meta == 'yes'): ?>
<div class="awp-blog-grid-meta">
<?php if ( 'true' == $settings['author'] ) { ?>
<span class="meta-author"><i class="fa fas fa-user spaceLeftRight"></i><?php echo the_author_posts_link(); ?></span>
<?php } ?>
<?php if ( 'true' == $settings['date'] ) { ?>
<span class="meta-date"><i class="fa fas fa-clock spaceLeftRight"></i><?php echo get_the_date(); ?></span>
<?php } ?>
<?php if ( 'true' == $settings['comments'] && comments_open() && ! post_password_required() ) { ?>
<span class="meta-comments"><i class="fa fas fa-comments spaceLeftRight"></i><?php comments_popup_link( esc_html__( '0 Comments', 'attesa-extra' ), esc_html__( '1 Comment', 'attesa-extra' ), esc_html__( '% Comments', 'attesa-extra' ), 'comments-link' ); ?></span>
<?php } ?>
</div>
<?php endif; ?>
<?php if ($show_categories == 'yes'):
$categories_list = get_the_category_list( ' &bull; ' );
if ( $categories_list ) {
echo '<span class="elementor-cat-links">' . $categories_list . '</span>';
}
endif; ?>
<?php the_title( sprintf( '<'.esc_attr($tag).' class="entry-title attesa-extra-elementor-blog-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></'.esc_attr($tag).'>' ); ?>
<?php if($show_limit == 'yes'): ?>
<div class="post-excerpt">
<?php echo wp_trim_words( wp_strip_all_tags( get_the_excerpt() ), $limit ); ?>
</div>
<?php endif; ?>
</article>
<?php endwhile; ?>
</div>
</div>
<?php
wp_reset_postdata();
endif;
}
protected function _content_template() {
}
}