File: //proc/thread-self/root/proc/self/cwd/wp-content/themes/kidzieo/includes/elementor/service.php
<?php
namespace Elementor; // Custom widgets must be defined in the Elementor namespace
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly (security measure)
/**
* Widget Name: Projects Carousel
*/
class PBMIT_ServiceElement extends Widget_Base{
// The get_name() method is a simple one, you just need to return a widget name that will be used in the code.
public function get_name() {
return 'pbmit_service_element';
}
// The get_title() method, which again, is a very simple one, you need to return the widget title that will be displayed as the widget label.
public function get_title() {
// Service
$service_cpt_singular_title = esc_attr__('Service','kidzieo');
$service_cpt_singular_title2 = get_theme_mod( 'service-cpt-singular-title' );
$service_cpt_singular_title = ( !empty($service_cpt_singular_title2) ) ? $service_cpt_singular_title2 : $service_cpt_singular_title ;
return sprintf( esc_attr__( 'Kidzieo %1$s Element', 'kidzieo' ), $service_cpt_singular_title );
}
// The get_icon() method, is an optional but recommended method, it lets you set the widget icon. you can use any of the eicon or font-awesome icons, simply return the class name as a string.
public function get_icon() {
return 'fas fa-book-open';
}
// The get_categories method, lets you set the category of the widget, return the category name as a string.
public function get_categories() {
return [ 'kidzieo_category' ];
}
public function __construct($data = [], $args = null) {
parent::__construct($data, $args);
if( !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='carousel' ){
wp_enqueue_script( 'swiper' );
wp_enqueue_style( 'swiper' );
}
if( !empty($data['settings']["sortable"]) && $data['settings']["sortable"]=='yes' ){
wp_enqueue_script( 'isotope' );
}
if( !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='masonry' ){
wp_enqueue_script( 'masonry' );
wp_enqueue_script( 'isotope' );
wp_localize_script(
'infinite-scroll', // Handle
'pbmit_infinite_scroll_vars', // Object name
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'ajaxnonce' => wp_create_nonce( 'pbmit_infinite_scroll_ajax_validation' )
)
);
}
if( ( !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='masonry' ) &&
( !empty($data['settings']["infinite-scroll"]) && $data['settings']["infinite-scroll"]=='yes' )
){
wp_enqueue_script( 'infinite-scroll' );
}
}
protected function register_controls() {
// Service
$service_cpt_title = esc_attr__('Services','kidzieo');
$service_cpt_title2 = get_theme_mod( 'service-cpt-title' );
$service_cpt_title = ( !empty($service_cpt_title2) ) ? $service_cpt_title2 : $service_cpt_title ;
$service_cpt_singular_title = esc_attr__('Service','kidzieo');
$service_cpt_singular_title2 = get_theme_mod( 'servicel-cpt-singular-title' );
$service_cpt_singular_title = ( !empty($service_cpt_singular_title2) ) ? $service_cpt_singular_title2 : $service_cpt_singular_title;
$service_cat_singular_title = esc_attr__('Service Category','kidzieo');
$service_cat_singular_title2 = get_theme_mod( 'service-cat-singular-title' );
$service_cat_singular_title = ( !empty($service_cat_singular_title2) ) ? $service_cat_singular_title2 : $service_cat_singular_title ;
// Style
$this->start_controls_section(
'style_section',
[
'label' => sprintf( esc_attr__( '%1$s Style Options', 'kidzieo' ), $service_cpt_singular_title ),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'style',
[
'label' => sprintf( esc_attr__( 'Select %1$s View Style', 'kidzieo' ), $service_cpt_singular_title ),
'description' => sprintf( esc_attr__( 'Select %1$s View Style', 'kidzieo' ), $service_cpt_singular_title ),
'type' => 'pbmit_imgselect',
'label_block' => true,
'thumb_width' => '110px',
'default' => '1',
'options' => pbmit_element_template_list( 'service', true ),
]
);
$this->end_controls_section();
// Column and Carousel Options
$this->start_controls_section(
'row_column_section',
[
'label' => esc_attr__( 'Column and Carousel Options', 'kidzieo' ),
'condition' => [
'style' => '1',
]
]
);
$this->add_control(
'view-type',
[
'label' => sprintf( esc_attr__( 'How you like to view each %1$s box?', 'kidzieo' ), $service_cpt_singular_title ),
'description' => esc_attr__( 'Show as carousel view, simple row-column view or masonry view.', 'kidzieo' ),
'type' => 'pbmit_imgselect',
'label_block' => true,
'thumb_width' => '110px',
'default' => 'row-column',
'options' => [
'row-column' => esc_url( get_template_directory_uri() . '/includes/images/row-column.png' ),
'carousel' => esc_url( get_template_directory_uri() . '/includes/images/carousel.png' ),
'masonry' => esc_url( get_template_directory_uri() . '/includes/images/masonry.png' ),
],
]
);
// Carousel: Heading
$this->add_control(
'carousel_options',
[
'label' => esc_attr__( 'Carousel Options', 'kidzieo' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : Autoplay
$this->add_control(
'carousel-autoplay',
[
'label' => esc_attr__( 'Carousel: Autoplay', 'kidzieo' ),
'description' => esc_attr__( 'Autoplay of carousel.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'default' => '0',
'options' => [
'1' => esc_attr__( 'Yes', 'kidzieo' ),
'0' => esc_attr__( 'No', 'kidzieo' ),
],
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : delay
$this->add_control(
'carousel-delay',
[
'label' => esc_attr__( 'Carousel: delay', 'kidzieo' ),
'description' => esc_attr__( 'Slide hold time (in ms).', 'kidzieo' ),
'type' => Controls_Manager::TEXT,
'default' => '4000',
'condition' => [
'view-type' => 'carousel',
'carousel-autoplay' => '1',
]
]
);
// Carousel : Loop
$this->add_control(
'carousel-loop',
[
'label' => esc_attr__( 'Carousel: Loop', 'kidzieo' ),
'description' => esc_attr__( 'Infinity loop. Duplicate last and first items to get loop illusion.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'default' => '1',
'options' => [
'1' => esc_attr__( 'Yes', 'kidzieo' ),
'0' => esc_attr__( 'No', 'kidzieo' ),
],
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : Center
$this->add_control(
'carousel-center',
[
'label' => esc_attr__( 'Carousel: Center', 'kidzieo' ),
'description' => esc_attr__( 'Center item. Works well with even an odd number of items.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'default' => '0',
'options' => [
'1' => esc_attr__( 'Yes', 'kidzieo' ),
'0' => esc_attr__( 'No', 'kidzieo' ),
],
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : Nav
$this->add_control(
'carousel-nav',
[
'label' => esc_attr__( 'Carousel: Nav', 'kidzieo' ),
'description' => esc_attr__( 'Show next/prev buttons.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'default' => '0',
'options' => [
'1' => esc_attr__( 'Yes', 'kidzieo' ),
'0' => esc_attr__( 'No', 'kidzieo' ),
'above' => esc_attr__( 'Yes, near heading area', 'kidzieo' ),
],
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : Dots
$this->add_control(
'carousel-dots',
[
'label' => esc_attr__( 'Carousel: Dots', 'kidzieo' ),
'description' => esc_attr__( 'Show dots navigation.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'default' => '0',
'options' => [
'1' => esc_attr__( 'Yes', 'kidzieo' ),
'0' => esc_attr__( 'No', 'kidzieo' ),
],
'condition' => [
'view-type' => 'carousel',
]
]
);
// Carousel : Speed
$this->add_control(
'carousel-speed',
[
'label' => esc_attr__( 'Carousel:Speed', 'kidzieo' ),
'description' => esc_attr__( 'Slider animation time (in ms.)', 'kidzieo' ),
'type' => Controls_Manager::TEXT,
'default' => '3000',
'condition' => [
'view-type' => 'carousel',
]
]
);
// Infinite scroll
$this->add_control(
'infinite-scroll-section-heading',
[
'label' => esc_attr__( 'Infinite Scroll Options', 'kidzieo' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'view-type' => 'masonry',
],
]
);
$this->add_control(
'infinite-scroll',
[
'label' => esc_attr__( 'Enable infinite scroll ?', 'kidzieo' ),
'description' => sprintf( esc_attr__( 'Select YES to dynamically load more %1$s', 'kidzieo' ), $service_cpt_title ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_attr__( 'Yes', 'kidzieo' ),
'label_off' => esc_attr__( 'No', 'kidzieo' ),
'return_value' => 'yes',
'default' => '',
'condition' => [
'view-type' => 'masonry',
],
]
);
$this->add_control(
'infinite-scroll-show-loadmore-type',
[
'label' => esc_attr__( 'Load new boxes', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'options' => [
'auto' => esc_attr( 'On page scroll (auto)' ),
'button' => esc_attr( 'On button click' ),
],
'condition' => [
'view-type' => 'masonry',
'infinite-scroll' => 'yes',
],
'default' => esc_attr( 'auto' ),
]
);
$this->add_control(
'infinite-scroll-loadmore-btn-title',
[
'label' => esc_attr__( 'Button text', 'kidzieo' ),
'description' => esc_attr__( 'Button title for the "Load More" button.', 'kidzieo' ),
'type' => Controls_Manager::TEXTAREA,
'dynamic' => [
'active' => true,
],
'condition' => [
'infinite-scroll-show-loadmore-type' => 'button',
'infinite-scroll' => 'yes',
'view-type' => 'masonry',
],
'default' => esc_attr__( 'Load More', 'kidzieo' ),
'placeholder' => esc_attr__( 'Enter button title', 'kidzieo' ),
'label_block' => true,
]
);
// Columns
$this->add_control(
'view-column-section-heading',
[
'label' => esc_attr__( 'Column Settings', 'kidzieo' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_control(
'columns',
[
'label' => esc_attr__( 'View in Column', 'kidzieo' ),
'description' => esc_attr__( 'Select how many column to show.', 'kidzieo' ),
'type' => 'pbmit_imgselect',
'label_block' => true,
'thumb_width' => '110px',
'default' => '3',
'options' => [
'1' => esc_url( get_template_directory_uri() . '/includes/images/column-1.png' ),
'2' => esc_url( get_template_directory_uri() . '/includes/images/column-2.png' ),
'3' => esc_url( get_template_directory_uri() . '/includes/images/column-3.png' ),
'4' => esc_url( get_template_directory_uri() . '/includes/images/column-4.png' ),
],
]
);
$this->end_controls_section();
// Heading and Subheading
$this->start_controls_section(
'heading_section',
[
'label' => esc_attr__( 'Heading and Subheading', 'kidzieo' ),
]
);
$this->add_control(
'heading_style',
[
'label' => esc_attr__( 'Select Heading/Subheading View Style', 'kidzieo' ),
'description' => esc_attr__( 'Select Heading/Subheading View Style.', 'kidzieo' ),
'type' => 'pbmit_imgselect',
'label_block' => true,
'thumb_width' => '110px',
'default' => '1',
'options' => pbmit_element_template_list( 'heading-subheading', true ),
]
);
$this->add_control(
'title_animation',
[
'label' => esc_attr__( 'Heading Animation', 'kidzieo' ),
'description' => esc_attr__( 'Select Heading Text Animation View style.', 'kidzieo' ) . ' ' . pbmit_esc_kses('<br><a target="_blank" href="' . esc_url('http://kidzieo-demo.pbminfotech.com/demo1/element/#heading-animations') . '">' . esc_attr__( 'See all anmiation demo here.', 'kidzieo' ) . '</a>' ),
'type' => Controls_Manager::SELECT,
'options' => [
'' => esc_attr__( 'No animation', 'kidzieo' ),
'1' => esc_attr__( 'Animation Style 1', 'kidzieo' ),
'2' => esc_attr__( 'Animation Style 2', 'kidzieo' ),
'3' => esc_attr__( 'Animation Style 3', 'kidzieo' ),
],
'separator' => 'before',
]
);
$this->add_control(
'title',
[
'label' => esc_attr__( 'Heading', 'kidzieo' ),
'type' => Controls_Manager::TEXTAREA,
'dynamic' => [
'active' => true,
],
'default' => sprintf( esc_attr__( 'Our %1$s', 'kidzieo' ), $service_cpt_singular_title ),
'placeholder' => esc_attr__( 'Enter your heading', 'kidzieo' ),
'label_block' => true,
]
);
$this->add_control(
'title_link',
[
'label' => esc_attr__( 'Heading Link', 'kidzieo' ),
'type' => Controls_Manager::URL,
'label_block' => true,
]
);
$this->add_control(
'subtitle',
[
'label' => esc_attr__( 'Subheading', 'kidzieo' ),
'type' => Controls_Manager::TEXTAREA,
'dynamic' => [
'active' => true,
],
'placeholder' => esc_attr__( 'Enter your subtitle', 'kidzieo' ),
'label_block' => true,
]
);
$this->add_control(
'subtitle_link',
[
'label' => esc_attr__( 'Subheading Link', 'kidzieo' ),
'type' => Controls_Manager::URL,
'label_block' => true,
]
);
$this->add_control(
'desc',
[
'label' => esc_attr__( 'Description', 'kidzieo' ),
'type' => Controls_Manager::TEXTAREA,
'placeholder' => esc_attr__( 'Type your description here', 'kidzieo' ),
]
);
$this->add_control(
'reverse_title',
[
'label' => esc_attr__( 'Reverse Heading', 'kidzieo' ),
'description' => esc_attr__( 'Show Subheading before Heading', 'kidzieo' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_attr__( 'Yes', 'kidzieo' ),
'label_off' => esc_attr__( 'No', 'kidzieo' ),
'return_value' => 'yes',
'default' => '',
]
);
$this->add_responsive_control(
'text_align',
[
'label' => esc_attr__( 'Alignment', 'kidzieo' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => esc_attr__( 'Left', 'kidzieo' ),
'icon' => 'fa fa-align-left',
],
'center' => [
'title' => esc_attr__( 'Center', 'kidzieo' ),
'icon' => 'fa fa-align-center',
],
'right' => [
'title' => esc_attr__( 'Right', 'kidzieo' ),
'icon' => 'fa fa-align-right',
],
],
'prefix_class' => 'pbmit-ele-header-align-',
'selectors' => [
'{{WRAPPER}} .pbmit-heading-subheading' => 'text-align: {{VALUE}};',
],
]
);
$this->add_control(
'title_btn',
[
'label' => esc_attr__( 'Button Title', 'kidzieo' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => esc_attr__( 'Read More', 'kidzieo' ),
'placeholder' => esc_attr__( 'Enter button title here', 'kidzieo' ),
'label_block' => true,
'default' => esc_attr__( 'Read More', 'kidzieo' ),
'condition' => [
'style' => ['3'],
],
]
);
$this->add_control(
'btn_link',
[
'label' => esc_attr__( 'Button Link', 'kidzieo' ),
'type' => Controls_Manager::URL,
'label_block' => true,
'default' => array (
'url' => '#',
'is_external' => '',
'nofollow' => '',
'custom_attributes' => '',
),
'condition' => [
'style' => ['3'],
],
]
);
$this->end_controls_section();
// Heading and Subheading
$this->start_controls_section(
'data_section',
[
'label' => sprintf( esc_attr__( '%1$s Content Options', 'kidzieo' ), $service_cpt_singular_title ),
]
);
$this->add_control(
'from_category',
[
'label' => sprintf( esc_attr__( 'Show %2$s from selected %1$s?', 'kidzieo' ), $service_cat_singular_title, $service_cpt_singular_title ),
'type' => Controls_Manager::SELECT2,
'options' => $this->select_category(),
'multiple' => true,
'label_block' => true,
'placeholder' => esc_attr__( 'All Categories', 'kidzieo' ),
'condition' => [
'style!' => ['2','3'],
]
]
);
$this->add_control(
'show',
[
'label' => sprintf( esc_attr__( '%1$s to show', 'kidzieo' ), $service_cpt_singular_title ),
'description' => sprintf( esc_attr__( 'How many %1$s you want to show.', 'kidzieo' ), $service_cpt_singular_title ),
'separator' => 'before',
'type' => Controls_Manager::NUMBER,
'default' => '6',
]
);
$this->add_control(
'sortable',
[
'label' => sprintf( esc_attr__( 'Show Sortable %1$s?', 'kidzieo' ), $service_cat_singular_title ),
'description' => sprintf( esc_attr__( 'Select YES to show sortable %1$s.', 'kidzieo' ), $service_cat_singular_title ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_attr__( 'Yes', 'kidzieo' ),
'label_off' => esc_attr__( 'No', 'kidzieo' ),
'return_value' => 'yes',
'default' => '',
'condition' => [
'style!' => ['2','3','4'],
'view-type' => 'row-column',
]
]
);
$this->add_control(
'ajax_sortable',
[
'label' => esc_attr__( 'Ajax based sortable Category?', 'kidzieo' ),
'description' => sprintf( esc_attr__( 'Select YES to load %1$s using Ajax on click on the category.', 'kidzieo' ), $service_cpt_singular_title ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_attr__( 'Yes', 'kidzieo' ),
'label_off' => esc_attr__( 'No', 'kidzieo' ),
'return_value' => 'yes',
'default' => '',
'condition' => [
'view-type' => 'row-column',
'style!' => ['2','3','4'],
'sortable' => 'yes',
'offset!' => 'yes',
],
]
);
$this->add_control(
'order',
[
'label' => esc_attr__( 'Order', 'kidzieo' ),
'description' => esc_attr__( 'Designates the ascending or descending order.', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'separator' => 'before',
'default' => 'DESC',
'options' => [
'ASC' => esc_attr__( 'Ascending order (1, 2, 3; a, b, c)', 'kidzieo' ),
'DESC' => esc_attr__( 'Descending order (3, 2, 1; c, b, a)', 'kidzieo' ),
]
]
);
$this->add_control(
'orderby',
[
'label' => esc_attr__( 'Order By', 'kidzieo' ),
'description' => sprintf( esc_attr__( ' Sort retrieved %1$s by parameter.', 'kidzieo' ), $service_cat_singular_title ),
'type' => Controls_Manager::SELECT,
'default' => 'none',
'options' => [
'none' => esc_attr__( 'No order', 'kidzieo' ),
'ID' => esc_attr__( 'ID', 'kidzieo' ),
'title' => esc_attr__( 'Title', 'kidzieo' ),
'date' => esc_attr__( 'Date', 'kidzieo' ),
'rand' => esc_attr__( 'Random', 'kidzieo' ),
]
]
);
$this->add_control(
'offset',
[
'label' => sprintf( esc_attr__( 'Skip %1$s (offset)', 'kidzieo' ), $service_cpt_singular_title ),
'description' => sprintf( esc_attr__( 'How many %1$s you like to skip.', 'kidzieo' ), $service_cpt_singular_title ),
'type' => Controls_Manager::SELECT,
'label_block' => true,
'default' => '',
'options' => [
'' => sprintf( esc_attr__( 'Show All %1$s (No skip)', 'kidzieo' ), $service_cpt_singular_title ),
'1' => sprintf( esc_attr__( 'Skip first %1$s', 'kidzieo' ), $service_cpt_singular_title ),
'2' => sprintf( esc_attr__( 'Skip two %1$s', 'kidzieo' ), $service_cpt_title ),
'3' => sprintf( esc_attr__( 'Skip three %1$s', 'kidzieo' ), $service_cpt_title ),
'4' => sprintf( esc_attr__( 'Skip four %1$s', 'kidzieo' ), $service_cpt_title ),
'5' => sprintf( esc_attr__( 'Skip five %1$s', 'kidzieo' ), $service_cpt_title ),
],
'condition' => [
'ajax_sortable!' => 'yes',
]
]
);
$this->end_controls_section();
// HTML Tags
$this->start_controls_section(
'advanced_section',
[
'label' => pbmit_esc_kses('<img class="pbmit-tab-small-logo" src="'.get_template_directory_uri() . '/includes/images/pbm-small-logo.png" /> ') . esc_attr__( 'Tag & Gap Settings', 'kidzieo' ),
'tab' => Controls_Manager::TAB_ADVANCED,
]
);
$this->add_control(
'tag_options',
[
'label' => esc_attr__( 'Tags for SEO', 'kidzieo' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_control(
'title_tag',
[
'label' => esc_attr__( 'Heading Tag', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'options' => [
'h1' => esc_attr( 'H1' ),
'h2' => esc_attr( 'H2' ),
'h3' => esc_attr( 'H3' ),
'h4' => esc_attr( 'H4' ),
'h5' => esc_attr( 'H5' ),
'h6' => esc_attr( 'H6' ),
'div' => esc_attr( 'DIV' ),
],
'default' => esc_attr( 'h2' ),
]
);
$this->add_control(
'subtitle_tag',
[
'label' => esc_attr__( 'Subheading Tag', 'kidzieo' ),
'type' => Controls_Manager::SELECT,
'options' => [
'h1' => esc_attr( 'H1' ),
'h2' => esc_attr( 'H2' ),
'h3' => esc_attr( 'H3' ),
'h4' => esc_attr( 'H4' ),
'h5' => esc_attr( 'H5' ),
'h6' => esc_attr( 'H6' ),
'div' => esc_attr( 'DIV' ),
],
'default' => esc_attr( 'h4' ),
]
);
$this->add_control(
'gap_options',
[
'label' => sprintf( esc_attr__( 'Gap between %1$s boxes', 'kidzieo' ), $service_cpt_singular_title ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_control(
'gap',
[
'label' => esc_attr__( 'Box Gap', 'kidzieo' ),
'description' => sprintf( esc_attr__( 'Gap between each %1$s box.', 'kidzieo' ), $service_cpt_singular_title ),
'type' => Controls_Manager::SELECT,
'default' => 'default',
'options' => [
'default' => esc_attr__( 'Default Gap', 'kidzieo' ),
'0px' => esc_attr__( 'No Gap (0px)', 'kidzieo' ),
'5px' => esc_attr__( '5px', 'kidzieo' ),
'10px' => esc_attr__( '10px', 'kidzieo' ),
'15px' => esc_attr__( '15px', 'kidzieo' ),
'20px' => esc_attr__( '20px', 'kidzieo' ),
'25px' => esc_attr__( '25px', 'kidzieo' ),
'30px' => esc_attr__( '30px', 'kidzieo' ),
'35px' => esc_attr__( '35px', 'kidzieo' ),
'40px' => esc_attr__( '40px', 'kidzieo' ),
'45px' => esc_attr__( '45px', 'kidzieo' ),
'50px' => esc_attr__( '50px', 'kidzieo' ),
],
]
);
$this->end_controls_section();
}
protected function render() {
$settings = $this->get_settings_for_display();
extract($settings);
$columns = ( !empty($columns) ) ? $columns : '1' ;
// Masonry image sizes
$masonry_image_size_array = array(
'pbmit-img-770x492', // For masonry 1st box
'pbmit-img-770x762', // For masonry 2nd box
'pbmit-img-770x492', // For masonry 3rd box
'pbmit-img-770x745', // For masonry 4th box
'pbmit-img-770x745', // For masonry 5th box
'pbmit-img-770x872', // For masonry 6th box
'pbmit-img-770x447', // For masonry 7th box
'pbmit-img-770x485', // For masonry 8th box
'pbmit-img-770x974', // For masonry 9th box
);
$swiper_class = '';
if( isset($data['settings']["view-type"]) && !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='carousel' ){
$swiper_class = ' swiper-wrapper';
}
$infinite_scroll_enabled = ( isset($settings['infinite-scroll']) && !empty($settings['infinite-scroll']) ) ? $settings['infinite-scroll'] : 'no' ;
$loadmore_btn = ( isset($settings['infinite-scroll-show-loadmore-type']) && !empty($settings['infinite-scroll-show-loadmore-type']) ) ? $settings['infinite-scroll-show-loadmore-type'] : 'no' ;
$loadmore_btn_title = ( isset($settings['infinite-scroll-loadmore-btn-title']) && !empty($settings['infinite-scroll-loadmore-btn-title']) ) ? $settings['infinite-scroll-loadmore-btn-title'] : '' ;
?>
<?php
// Starting container
$start_div = pbmit_element_container( array(
'position' => 'start',
'cpt' => 'service',
'data' => $settings
) );
echo pbmit_esc_kses($start_div);
if($style !== '2' || $style == '3' ){?>
<div class="pbmit-ele-header-area">
<?php pbmit_heading_subheading($settings, true); ?>
<?php
// Button
$button_html = '';
if( !empty($settings['title_btn']) && !empty($settings['btn_link']['url']) ){
$button_html = '<div class="pbmit-service-btn pbmit-head-btn">' . pbmit_link_render($settings['btn_link'], 'start' ) . pbmit_esc_kses($settings['title_btn']) . pbmit_link_render($settings['btn_link'], 'end' ) . '</div>';
} ?>
<?php if( $style == '3' ){
echo pbmit_esc_kses($button_html);
}
/* Sortable Category */
$sortable_html = pbmit_sortable_category( $settings, 'pbmit-service-category' );
if( !empty($sortable_html) ){
echo pbmit_esc_kses( $sortable_html );
}
?>
</div>
<?php } ?>
<?php
// Infinite scroll data
$infinite_scroll_data = array();
$infinite_scroll_data['cpt'] = 'service';
$infinite_scroll_data['style'] = $style;
if( !empty($settings['columns']) ){
$infinite_scroll_data['columns'] = $settings['columns'];
}
if( !empty($settings['show']) ){
$infinite_scroll_data['show'] = $settings['show'];
}
if( !empty($settings['offset']) ){
$infinite_scroll_data['offset'] = $settings['offset'];
}
if( !empty($settings['from_category']) ){
$infinite_scroll_data['from_category'] = $settings['from_category'];
}
if( !empty($settings['show']) ){
$infinite_scroll_data['show'] = $settings['show'];
}
if( !empty($settings['order']) ){
$infinite_scroll_data['order'] = $settings['order'];
}
if( !empty($settings['orderby']) ){
$infinite_scroll_data['orderby'] = $settings['orderby'];
}
echo pbmit_esc_kses('<div class="pbmit-infinite-scroll-data">'.json_encode($infinite_scroll_data).'</div>');
// Preparing $args
$args = array(
'post_type' => 'pbmit-service',
'status' => 'publish',
'posts_per_page' => $show,
'ignore_sticky_posts' => true,
);
if( !empty($offset) ){
$args['offset'] = $offset;
}
if( !empty($orderby) && $orderby!='none' ){
$args['orderby'] = $orderby;
if( !empty($order) ){
$args['order'] = $order;
}
}
// From selected category/group
if( !empty($from_category) ){
$args['tax_query'] = array(
array(
'taxonomy' => 'pbmit-service-category',
'field' => 'slug',
'terms' => $from_category,
),
);
};
// Wp query to fetch posts
$posts = new \WP_Query( $args );
if ( $posts->have_posts() ) {
?>
<div class="pbmit-element-posts-wrapper row multi-columns-row <?php if( !empty($settings['view-type']) && trim($settings['view-type'])=='carousel' ){ ?>swiper-container<?php } ?> ">
<?php if(( $style == '2' )){ ?>
<div class="pbmit-main-hover-slider">
<div class= "swiper-hover-slide-nav col-md-12 col-lg-6">
<?php pbmit_heading_subheading($settings, true); ?>
<ul class="pbmit-hover-inner">
<?php
$x = 1;
while ( $posts->have_posts() ) {
$posts->the_post();
//number
if ( strlen( $x ) == 1 ){
$x = esc_html ('0').$x;
} ?>
<li><h3 class="pbmit-title-data-hover" data-text ="<?php echo get_the_title(); ?>">
<a class="pbmit-title-inner" href="<?php the_permalink(); ?>">
<span class="pbminfotech-box-number"><?php echo esc_attr($x); ?></span>
<span class="pbminfotech-box-title"><?php echo get_the_title(); ?></span></a></h3></li>
<?php // number
$x++;
} ?>
</ul>
</div>
<div class="swiper-hover-slide-images col-md-12 col-lg-6">
<div class="swiper pbmit-hover-image">
<div class="swiper-wrapper">
<?php
while ( $posts->have_posts() ) {
$posts->the_post();?>
<div class="swiper-slide">
<?php pbmit_get_featured_data( array( 'featured_img_only' => true, 'size' => 'pbmit-img-420x630' ) ); ?>
</div>
<?php } ?>
</div>
</div>
<div class="swiper-hover-slide-desc">
<div class="swiper-container pbmit-short-description">
<div class="swiper-wrapper">
<?php
while ( $posts->have_posts() ) {
$posts->the_post();
// Icon
$icon_html = $icon_array = '';
$custom_icon_enabled = get_post_meta( get_the_ID(), 'pbmit-custom-icon-enabled', true );
if( $custom_icon_enabled=='1' ){
$img_src = '';
$custom_icon_url = get_post_meta( get_the_ID(), 'pbmit-custom-icon', true );
if( !empty($custom_icon_url) ){
$img_src = wp_get_attachment_image_src($custom_icon_url, 'full');
if( !empty($img_src[0]) ){ $custom_icon_url = $img_src[0]; }
}
$icon_html = '<img src="'.$custom_icon_url.'"/>';
}else{
$icon_lib = get_post_meta( get_the_ID(), 'pbmit-service-icon-library', true );
wp_enqueue_style($icon_lib);
$icon_class = get_post_meta( get_the_ID(), 'pbmit-service-icon-'.$icon_lib, true );
// icon library name for the function
$icon_lib2 = $icon_lib;
if( $icon_lib == 'elementor-icons-fa-regular' ){
$icon_lib2 = 'fa-regular';
} else if( $icon_lib == 'elementor-icons-fa-solid' ){
$icon_lib2 = 'fa-solid';
} else if( $icon_lib == 'elementor-icons-fa-brands' ){
$icon_lib2 = 'fa-brands';
}
$icon_array = array(
'value' => $icon_class,
'library' => $icon_lib2,
);
}
$short_desc = get_post_meta( get_the_ID(), 'pbmit-short-description', true );
?>
<div class="swiper-slide pbmit-service-icon-wraper">
<span class="pbmit-service-icon-inner">
<?php if( !empty($icon_html)){
echo pbmit_esc_kses ( $icon_html );
} else {
Icons_Manager::render_icon( $icon_array, [ 'aria-hidden' => 'true' ] );
} ?>
</span>
<span class="pbmit-desc"><?php echo do_shortcode($short_desc); ?></span>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
</div>
<?php } else if(( $style == '3' )){ ?>
<div class="pbmit-main-hover-faded">
<div class= "swiper-hover-slide-nav">
<ul class="pbmit-hover-inner">
<?php
while ( $posts->have_posts() ) {
$posts->the_post();?>
<li>
<div class="pbmit-title-box-wrap">
<?php
// Icon
$icon_html = $icon_array = '';
$custom_icon_enabled = get_post_meta( get_the_ID(), 'pbmit-custom-icon-enabled', true );
if( $custom_icon_enabled=='1' ){
$img_src = '';
$custom_icon_url = get_post_meta( get_the_ID(), 'pbmit-custom-icon', true );
if( !empty($custom_icon_url) ){
$img_src = wp_get_attachment_image_src($custom_icon_url, 'full');
if( !empty($img_src[0]) ){ $custom_icon_url = $img_src[0]; }
}
$icon_html = '<img src="'.$custom_icon_url.'"/>';
}else{
$icon_lib = get_post_meta( get_the_ID(), 'pbmit-service-icon-library', true );
wp_enqueue_style($icon_lib);
$icon_class = get_post_meta( get_the_ID(), 'pbmit-service-icon-'.$icon_lib, true );
// icon library name for the function
$icon_lib2 = $icon_lib;
if( $icon_lib == 'elementor-icons-fa-regular' ){
$icon_lib2 = 'fa-regular';
} else if( $icon_lib == 'elementor-icons-fa-solid' ){
$icon_lib2 = 'fa-solid';
} else if( $icon_lib == 'elementor-icons-fa-brands' ){
$icon_lib2 = 'fa-brands';
}
$icon_array = array(
'value' => $icon_class,
'library' => $icon_lib2,
);
}?>
<div class="pbmit-service-icon-wrapper">
<?php if( !empty($icon_html)){
echo pbmit_esc_kses ( $icon_html );
} else {
Icons_Manager::render_icon( $icon_array, [ 'aria-hidden' => 'true' ] );
} ?>
</div>
<h3 class="pbmit-service-title"><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></h3>
<?php
$short_desc = get_post_meta( get_the_ID(), 'pbmit-short-description', true );
if( !empty($short_desc) ){
?>
<div class="pbmit-short-description">
<?php echo do_shortcode($short_desc); ?>
</div>
<?php
} ?>
</div>
<?php
if( isset($ts_temp) ){
unset($icon_html);
} ?>
</li>
<?php } ?>
</ul>
</div>
<div class="swiper-hover-slide-images">
<div class="swiper-container swiper-fade pbmit-hover-image-faded">
<div class="swiper-wrapper">
<?php
while ( $posts->have_posts() ) {
$posts->the_post();?>
<div class="swiper-slide">
<?php pbmit_get_featured_data( array( 'featured_img_only' => true, 'size' => 'pbmit-img-600x1000' ) ); ?>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<?php }
else if(( $style == '4' )){ ?>
<div class="pbmit-main-service">
<ul class="pbmit-service-inner">
<?php
while ( $posts->have_posts() ) {
$posts->the_post();?>
<li>
<div class="pbmit-title-box-wrap">
<?php
// Icon
$icon_html = $icon_array = '';
$custom_icon_enabled = get_post_meta( get_the_ID(), 'pbmit-custom-icon-enabled', true );
if( $custom_icon_enabled=='1' ){
$img_src = '';
$custom_icon_url = get_post_meta( get_the_ID(), 'pbmit-custom-icon', true );
if( !empty($custom_icon_url) ){
$img_src = wp_get_attachment_image_src($custom_icon_url, 'full');
if( !empty($img_src[0]) ){ $custom_icon_url = $img_src[0]; }
}
$icon_html = '<img src="'.$custom_icon_url.'"/>';
}else{
$icon_lib = get_post_meta( get_the_ID(), 'pbmit-service-icon-library', true );
wp_enqueue_style($icon_lib);
$icon_class = get_post_meta( get_the_ID(), 'pbmit-service-icon-'.$icon_lib, true );
// icon library name for the function
$icon_lib2 = $icon_lib;
if( $icon_lib == 'elementor-icons-fa-regular' ){
$icon_lib2 = 'fa-regular';
} else if( $icon_lib == 'elementor-icons-fa-solid' ){
$icon_lib2 = 'fa-solid';
} else if( $icon_lib == 'elementor-icons-fa-brands' ){
$icon_lib2 = 'fa-brands';
}
$icon_array = array(
'value' => $icon_class,
'library' => $icon_lib2,
);
}?>
<div class="pbmit-service-icon-wrapper">
<?php if( !empty($icon_html)){
echo pbmit_esc_kses ( $icon_html );
} else {
Icons_Manager::render_icon( $icon_array, [ 'aria-hidden' => 'true' ] );
} ?>
</div>
<h3 class="pbmit-service-title"><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></h3>
<div class="pbmit-service-image">
<?php pbmit_get_featured_data( array( 'featured_img_only' => true, 'size' => 'pbmit-img-400x400' ) ); ?>
</div>
</div>
<?php
if( isset($ts_temp) ){
unset($icon_html);
} ?>
</li>
<?php } ?>
</ul>
</div>
<?php } else { ?>
<?php
$odd_even = 'odd';
$x = 1;
$pbmit_global_sc_loop_inner_count = 0;
while ( $posts->have_posts() ) {
$return = '';
$posts->the_post();
// masonry image size
$imgsize = ''; // default image size variable. This should be empty.
if( !empty($settings['view-type']) && $settings['view-type'] == 'masonry' ){
$imgsize = $masonry_image_size_array[($pbmit_global_sc_loop_inner_count)];
}
// Template
if( file_exists( locate_template( '/theme-parts/service/service-style-'.esc_attr($style).'.php', false, false ) ) ){
$return .= pbmit_element_block_container( array(
'position' => 'start',
'column' => $columns,
'cpt' => 'service',
'taxonomy' => 'pbmit-service-category',
'style' => $style,
) );
ob_start();
$r = include( locate_template( '/theme-parts/service/service-style-'.esc_attr($style).'.php', false, false ) );
$return .= ob_get_contents();
ob_end_clean();
$return .= pbmit_element_block_container( array(
'position' => 'end',
) );
// Variable to count current, for image size and other use
$pbmit_global_sc_loop_inner_count++;
if( !empty($masonry_image_size_array) ){
if (($x) % (count($masonry_image_size_array)) == 0) {
$pbmit_global_sc_loop_inner_count = 0;
}
}
}
echo pbmit_esc_kses($return);
// odd or even
if( $odd_even == 'odd' ){ $odd_even = 'even'; } else { $odd_even = 'odd'; }
// number
$x++;
}
} ?>
</div> <!-- .pbmit-element-posts-wrapper -->
<?php
// infinite scroll
if( $infinite_scroll_enabled=='yes' ){
// Load More button
if( $loadmore_btn == 'button' ){
if( empty($loadmore_btn_title) ){
$loadmore_btn_title = esc_attr__( 'Load More', 'kidzieo' );
}
echo pbmit_esc_kses( '<div class="pbmit-ajax-load-more-btn"><a href="#">' . esc_attr($loadmore_btn_title) . '</a></div>' );
}
echo pbmit_esc_kses( '<div class="pbmit-infinite-loader"><img src="' . get_template_directory_uri() . '/images/three-dots.svg" width="60" alt="' . esc_attr__( 'Loader', 'kidzieo' ) . '"></div><div class="pbmit-infinite-scroll-last">' . esc_attr__( 'All content loaded', 'kidzieo' ) . '</div>' );
}
?>
<?php } else { ?>
<div class="pbmit-no-data-message"><?php esc_html_e('No data available.', 'kidzieo'); ?></div>
<?php } ?>
<?php wp_reset_postdata(); ?>
<?php
// Ending wrapper of the whole arear
pbmit_element_container( array(
'position' => 'end',
'cpt' => 'service',
'data' => $settings
) );
?>
<?php
}
protected function content_template() {}
protected function select_category() {
$category = get_terms( array( 'taxonomy' => 'pbmit-service-category', 'hide_empty' => false ) );
$cat = array();
foreach( $category as $item ) {
$cat_count = get_category( $item );
if( $item ) {
$cat[$item->slug] = $item->name . ' ('.$cat_count->count.')';
}
}
return $cat;
}
}
// After the Schedule class is defined, I must register the new widget class with Elementor:
Plugin::instance()->widgets_manager->register( new PBMIT_ServiceElement() );