Advertisement
ikamal7

slider widget

Mar 12th, 2021
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.00 KB | None | 0 0
  1. <?php
  2.  
  3. use Elementor\Controls_Manager;
  4. use Elementor\Group_Control_Border;
  5. use Elementor\Group_Control_Box_Shadow;
  6. use Elementor\Group_Control_Typography;
  7. use Elementor\Scheme_Typography;
  8.  
  9. class CF_Event_Slider_Widget extends \Elementor\Widget_Base {
  10.     public function get_name() {
  11.         return "cf_event_slider";
  12.     }
  13.     public function get_title() {
  14.         return "CF Events Slider";
  15.     }
  16.    
  17.     public function get_icon() {
  18.         return "eicon-slider-push";
  19.     }
  20.     public function get_categories() {
  21.         return [ 'general', 'cf-cat' ];
  22.     }
  23.     public function get_post_types() {
  24.         $post_types = cf_get_post_types( [],[ 'elementor_library', 'attachment' ] );
  25.         return $post_types;
  26.     }
  27.     public function get_style_depends() {
  28.         return [ 'owl-carousel', 'cf-style' ];
  29.     }
  30.     public function get_script_depends() {
  31.         return [ 'owl-carousel', 'cf-script' ];
  32.     }
  33.  
  34.     protected function _register_controls(){
  35.  
  36.         $this->start_controls_section(
  37.             '_section_post_settings',
  38.             [
  39.                 'label' => __( 'Settings', 'plugin-name' ),
  40.                 'tab' => Controls_Manager::TAB_CONTENT,
  41.             ]
  42.         );
  43.         $this->add_control(
  44.             'widget_title',
  45.             [
  46.                 'label' => __( 'Title', 'plugin-domain' ),
  47.                 'type' => \Elementor\Controls_Manager::TEXT,
  48.                 'default' => __( 'Posts', 'plugin-domain' ),
  49.                 'placeholder' => __( 'Type your title here', 'plugin-domain' ),
  50.                 'label_block'=> true
  51.             ]
  52.         );
  53.  
  54.         $this->add_control(
  55.             'height',
  56.             [
  57.                 'label' => __( 'Height', 'plugin-domain' ),
  58.                 'type' => \Elementor\Controls_Manager::SLIDER,
  59.                 'size_units' => [ 'px' ],
  60.                 'range' => [
  61.                     'px' => [
  62.                         'min' => 0,
  63.                         'max' => 1000,
  64.                         'step' => 1,
  65.                     ],
  66.                 ],
  67.                 'default' => [
  68.                     'unit' => 'px',
  69.                     'size' => 500,
  70.                 ],
  71.                 'selectors' => [
  72.                     '{{WRAPPER}} .single-slider' => 'height: {{SIZE}}{{UNIT}};',
  73.                 ],
  74.             ]
  75.         );
  76.  
  77.         $this->add_control(
  78.             'autoplay',
  79.             [
  80.                 'label' => __( 'Autoplay', 'plugin-domain' ),
  81.                 'type' => \Elementor\Controls_Manager::SWITCHER,
  82.                 'label_on' => __( 'Yes', 'your-plugin' ),
  83.                 'label_off' => __( 'No', 'your-plugin' ),
  84.                 'return_value' => 'true',
  85.                 'default' => 'true',
  86.             ]
  87.         );
  88.         $this->add_control(
  89.             'loop',
  90.             [
  91.                 'label' => __( 'Loop', 'plugin-domain' ),
  92.                 'type' => \Elementor\Controls_Manager::SWITCHER,
  93.                 'label_on' => __( 'Yes', 'your-plugin' ),
  94.                 'label_off' => __( 'No', 'your-plugin' ),
  95.                 'return_value' => 'true',
  96.                 'default' => 'true',
  97.             ]
  98.         );
  99.         $this->add_control(
  100.             'nav',
  101.             [
  102.                 'label' => __( 'Nav', 'plugin-domain' ),
  103.                 'type' => \Elementor\Controls_Manager::SWITCHER,
  104.                 'label_on' => __( 'Yes', 'your-plugin' ),
  105.                 'label_off' => __( 'No', 'your-plugin' ),
  106.                 'return_value' => 'true',
  107.                 'default' => 'false',
  108.             ]
  109.         );
  110.         $this->add_control(
  111.             'dots',
  112.             [
  113.                 'label' => __( 'Dots', 'plugin-domain' ),
  114.                 'type' => \Elementor\Controls_Manager::SWITCHER,
  115.                 'label_on' => __( 'Yes', 'your-plugin' ),
  116.                 'label_off' => __( 'No', 'your-plugin' ),
  117.                 'return_value' => 'true',
  118.                 'default' => 'true',
  119.             ]
  120.         );
  121.         $this->add_control(
  122.             'center',
  123.             [
  124.                 'label' => __( 'Center', 'plugin-domain' ),
  125.                 'type' => \Elementor\Controls_Manager::SWITCHER,
  126.                 'label_on' => __( 'Yes', 'your-plugin' ),
  127.                 'label_off' => __( 'No', 'your-plugin' ),
  128.                 'return_value' => 'true',
  129.                 'default' => 'true',
  130.             ]
  131.         );
  132.         $this->add_control(
  133.             'autoplaytimeout',
  134.             [
  135.                 'label' => __( 'Autoplay Timout', 'plugin-domain' ),
  136.                 'type' => \Elementor\Controls_Manager::NUMBER,
  137.                 'min' => 0,
  138.                 'max' => 10000,
  139.                 'step' => 1000,
  140.                 'default' => 0,
  141.             ]
  142.         );
  143.         $this->add_control(
  144.             'items',
  145.             [
  146.                 'label' => __( 'Slide Items', 'plugin-domain' ),
  147.                 'type' => \Elementor\Controls_Manager::NUMBER,
  148.                 'min' => 1,
  149.                 'max' => 99,
  150.                 'step' => 1,
  151.                 'default' => 3,
  152.             ]
  153.         );
  154.         $this->add_control(
  155.             'items_mobile',
  156.             [
  157.                 'label' => __( 'Slide Items Mobile', 'plugin-domain' ),
  158.                 'type' => \Elementor\Controls_Manager::NUMBER,
  159.                 'min' => 1,
  160.                 'max' => 99,
  161.                 'step' => 1,
  162.                 'default' => 1,
  163.             ]
  164.         );
  165.         $this->add_control(
  166.             'margin',
  167.             [
  168.                 'label' => __( 'Margin', 'plugin-domain' ),
  169.                 'type' => \Elementor\Controls_Manager::NUMBER,
  170.                 'min' => 0,
  171.                 'max' => 100,
  172.                 'step' => 1,
  173.                 'default' => 0,
  174.             ]
  175.         );
  176.  
  177.         $this->end_controls_section();
  178.  
  179.         $this->start_controls_section(
  180.             '_section_post_tab_query',
  181.             [
  182.                 'label' => __( 'Query', 'plugin-name' ),
  183.                 'tab' => Controls_Manager::TAB_CONTENT,
  184.             ]
  185.         );
  186.        
  187.         $this->add_control(
  188.             'post_type',
  189.             [
  190.                 'label' => __( 'Source', 'plugin-name' ),
  191.                 'type' => Controls_Manager::SELECT,
  192.                 'options' => $this->get_post_types(),
  193.                 'default' => key( $this->get_post_types() ),
  194.             ]
  195.         );
  196.         $this->add_control(
  197.             'item_limit',
  198.             [
  199.                 'label' => __( 'Item Limit', 'plugin-name' ),
  200.                 'type' => Controls_Manager::NUMBER,
  201.                 'default' => 3,
  202.                 'dynamic' => [ 'active' => true ],
  203.             ]
  204.         );
  205.  
  206.         $this->end_controls_section();
  207.        
  208.         $this->start_controls_section(
  209.             '_section_style_column',
  210.             [
  211.                 'label' => __( 'Widget style', 'plugin-name' ),
  212.                 'tab' => Controls_Manager::TAB_STYLE,
  213.             ]
  214.         );
  215.  
  216.         $this->add_group_control(
  217.             \Elementor\Group_Control_Background::get_type(),
  218.             [
  219.                 'name' => 'background',
  220.                 'label' => __( 'Background', 'plugin-domain' ),
  221.                 'types' => [ 'classic', 'gradient', 'video' ],
  222.                 'selector' => '{{WRAPPER}} .slider_title_box',
  223.             ]
  224.         );
  225.         $this->add_control(
  226.             'overlay_color',
  227.             [
  228.                 'label' => __( 'Overlay Color', 'plugin-domain' ),
  229.                 'type' => \Elementor\Controls_Manager::COLOR,
  230.                 'scheme' => [
  231.                     'type' => \Elementor\Scheme_Color::get_type(),
  232.                     'value' => \Elementor\Scheme_Color::COLOR_1,
  233.                 ],
  234.                 'default'=> '9006F3'
  235.             ]
  236.         );
  237.  
  238.  
  239.         $this->add_group_control(
  240.             \Elementor\Group_Control_Typography::get_type(),
  241.             [
  242.                 'name' => 'content_typography',
  243.                 'label' => __( 'Typography', 'plugin-domain' ),
  244.                 'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
  245.                 'selector' => '{{WRAPPER}} .cf_slider_title_box',
  246.             ]
  247.         );
  248.         $this->add_control(
  249.             'widget_title_color',
  250.             [
  251.                 'label' => __( 'Widget Title Color', 'plugin-domain' ),
  252.                 'type' => \Elementor\Controls_Manager::COLOR,
  253.                 'scheme' => [
  254.                     'type' => \Elementor\Scheme_Color::get_type(),
  255.                     'value' => \Elementor\Scheme_Color::COLOR_1,
  256.                 ],
  257.                 'selectors' => [
  258.                     '{{WRAPPER}} .cf_slider_title_box' => 'color: {{VALUE}}',
  259.                 ],
  260.             ]
  261.         );
  262.  
  263.         $this->end_controls_section();
  264.        
  265.         $this->start_controls_section(
  266.             '_section_style_title',
  267.             [
  268.                 'label' => __( 'Title', 'plugin-name' ),
  269.                 'tab' => Controls_Manager::TAB_STYLE,
  270.             ]
  271.         );
  272.         $this->add_control(
  273.             'title_color',
  274.             [
  275.                 'label' => __( 'Title Color', 'plugin-domain' ),
  276.                 'type' => \Elementor\Controls_Manager::COLOR,
  277.                 'scheme' => [
  278.                     'type' => \Elementor\Scheme_Color::get_type(),
  279.                     'value' => \Elementor\Scheme_Color::COLOR_1,
  280.                 ],
  281.                 'selectors' => [
  282.                     '{{WRAPPER}} .cf_post_title a' => 'color: {{VALUE}}',
  283.                 ],
  284.             ]
  285.         );
  286.        
  287.         $this->add_group_control(
  288.             \Elementor\Group_Control_Typography::get_type(),
  289.             [
  290.                 'name' => 'title_typography',
  291.                 'label' => __( 'Typography', 'plugin-domain' ),
  292.                 'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
  293.                 'selector' => '{{WRAPPER}} .cf_post_title',
  294.             ]
  295.         );
  296.         $this->end_controls_section();
  297.  
  298.         $this->start_controls_section(
  299.             '_section_style_image',
  300.             [
  301.                 'label' => __( 'Image', 'plugin-name' ),
  302.                 'tab' => Controls_Manager::TAB_STYLE,
  303.             ]
  304.         );
  305.         $this->add_control(
  306.             'image_size',
  307.             [
  308.                 'label' => __( 'Image Size', 'plugin-domain' ),
  309.                 'type' => \Elementor\Controls_Manager::SELECT,
  310.                 'default' => 'medium',
  311.                 'options' => [
  312.                     'thumbnail'  => __( 'Thumbnail', 'plugin-domain' ),
  313.                     'medium'  => __( 'Medium', 'plugin-domain' ),
  314.                     'medium_large'  => __( 'Medium Large', 'plugin-domain' ),
  315.                     'full'  => __( 'Full', 'plugin-domain' ),
  316.                     '1536x1536'  => __( '1536x1536', 'plugin-domain' ),
  317.                     '2048x2048'  => __( '2048x2048', 'plugin-domain' ),
  318.                 ],
  319.             ]
  320.         );
  321.  
  322.         $this->end_controls_section();
  323.  
  324.         $this->start_controls_section(
  325.             '_section_style_meta',
  326.             [
  327.                 'label' => __( 'Meta', 'plugin-name' ),
  328.                 'tab' => Controls_Manager::TAB_STYLE,
  329.             ]
  330.         );
  331.         $this->add_control(
  332.             'meta_color',
  333.             [
  334.                 'label' => __( 'Date Color', 'plugin-domain' ),
  335.                 'type' => \Elementor\Controls_Manager::COLOR,
  336.                 'scheme' => [
  337.                     'type' => \Elementor\Scheme_Color::get_type(),
  338.                     'value' => \Elementor\Scheme_Color::COLOR_1,
  339.                 ],
  340.                 'selectors' => [
  341.                     '{{WRAPPER}} .date_time' => 'color: {{VALUE}}',
  342.                 ],
  343.             ]
  344.         );
  345.        
  346.         $this->add_group_control(
  347.             \Elementor\Group_Control_Typography::get_type(),
  348.             [
  349.                 'name' => 'date_typography',
  350.                 'label' => __( 'Typography', 'plugin-domain' ),
  351.                 'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
  352.                 'selector' => '{{WRAPPER}} .date_time',
  353.             ]
  354.         );
  355.         $this->add_control(
  356.             'hr',
  357.             [
  358.                 'type' => \Elementor\Controls_Manager::DIVIDER,
  359.             ]
  360.         );
  361.         $this->add_control(
  362.             'location_color',
  363.             [
  364.                 'label' => __( 'Location Color', 'plugin-domain' ),
  365.                 'type' => \Elementor\Controls_Manager::COLOR,
  366.                 'scheme' => [
  367.                     'type' => \Elementor\Scheme_Color::get_type(),
  368.                     'value' => \Elementor\Scheme_Color::COLOR_1,
  369.                 ],
  370.                 'selectors' => [
  371.                     '{{WRAPPER}} .location' => 'color: {{VALUE}}',
  372.                 ],
  373.             ]
  374.         );
  375.        
  376.         $this->add_group_control(
  377.             \Elementor\Group_Control_Typography::get_type(),
  378.             [
  379.                 'name' => 'location_typography',
  380.                 'label' => __( 'Typography', 'plugin-domain' ),
  381.                 'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
  382.                 'selector' => '{{WRAPPER}} .location',
  383.             ]
  384.         );
  385.         $this->end_controls_section();
  386.     }
  387.  
  388.  
  389.    
  390.    
  391.     protected function render() {
  392.         $settings = $this->get_settings_for_display();
  393.         if ( !$settings['post_type'] ) {
  394.             return;
  395.         }
  396.  
  397.         $post_args = [
  398.             'post_status'      => 'publish',
  399.             'post_type'        => $settings['post_type'],
  400.             'posts_per_page'   => $settings['item_limit'],
  401.             'suppress_filters' => false,
  402.         ];
  403.  
  404.         $posts = get_posts( $post_args );
  405.         ?>
  406.  
  407.         <div class="cf_posts_slider">
  408.             <div class="slider_title_box" data-overlay-color="<?php echo $settings['overlay_color']; ?>">
  409.                 <h2 class="cf_slider_title_box"><?php echo $settings['widget_title']; ?></h2>
  410.             </div>
  411.             <div class="post_slider_wrapper">
  412.                 <div id="cf_post_slider" class="owl-carousel owl-theme cf_post_slider"
  413.                 data-items="[<?php echo esc_attr( $settings['items'] ); ?>,<?php echo esc_attr( $settings['items_mobile'] ); ?>]"
  414.                 data-margin="<?php echo esc_attr( $settings['margin'] ); ?>"
  415.                 data-autoplay="<?php echo esc_attr( $settings['autoplay'] ); ?>"
  416.                 data-center="<?php echo esc_attr( $settings['center'] ); ?>"
  417.                 data-loop="<?php echo esc_attr( $settings['loop'] ); ?>"
  418.                 data-nav="<?php echo esc_attr( $settings['nav'] ); ?>"
  419.                 data-dots="<?php echo esc_attr( $settings['dots'] ); ?>"
  420.                 data-autoplaytimeout="<?php echo esc_attr( $settings['autoplaytimeout'] ); ?>"
  421.                 >
  422.                 <?php foreach($posts as $post) : ?>
  423.                     <div class="single_post_box">
  424.                         <h2 class="cf_post_title">
  425.                             <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>"> <?php echo esc_html( $post->post_title ); ?></a>
  426.                         </h2>
  427.                         <div class="cf_post_thumb" data-size="">
  428.                             <?php if(has_post_thumbnail($post->ID)) : ?>
  429.                             <a href="<?php echo esc_url( get_the_permalink( $post->ID ) ); ?>">
  430.                                 <?php echo get_the_post_thumbnail($post->ID, $settings['image_size']); ?>
  431.                             </a>
  432.                             <?php endif; ?>
  433.                         </div>
  434.                         <?php if(get_field( 'event_date', $post->ID ) || get_field('location', $post->ID)) : ?>
  435.                         <div class="cf_post_meta">
  436.                             <span class="date_time"><?php echo get_field( 'event_date', $post->ID );?></span>
  437.                             <span class="location"><?php echo get_field('location', $post->ID); ?></span>
  438.                         </div>
  439.                         <?php endif; ?>
  440.                     </div>
  441.                 <?php endforeach; ?>
  442.                 </div>
  443.             </div>
  444.         </div>
  445.  
  446.  
  447.         <?php
  448.  
  449.  
  450.     }
  451.  
  452.     protected function _content_template() {}
  453. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement