File: /home/adltc/public_html/wp-content/plugins/elementskit/widgets/breadcrumb/breadcrumb.php
<?php
namespace Elementor;
defined('ABSPATH') || exit;
use Elementor\ElementsKit_Widget_Breadcrumb_Handler as Handler;
class ElementsKit_Widget_Breadcrumb extends Widget_Base {
public function get_name() {
return Handler::get_name();
}
public function get_title() {
return Handler::get_title();
}
public function get_icon() {
return Handler::get_icon();
}
public function get_categories() {
return Handler::get_categories();
}
public function get_keywords() {
return Handler::get_keywords();
}
public function get_help_url() {
return 'https://wpmet.com/doc/breadcrumb/';
}
protected function register_controls() {
$this->start_controls_section(
'ekit_lite_section_content',
[
'label' => __('Settings', 'elementskit'),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_bresdcroum_home_icon',
[
'label' => esc_html__('Home Icon', 'elementskit'),
'type' => Controls_Manager::ICONS,
'fa4compatibility' => 'icon',
'label_block' => false,
'skin' => 'inline',
]
);
$this->add_control(
'ekit_bresdcroum_separate_icon_show',
[
'label' => __('Show Separate Icon', 'elementskit'),
'type' => Controls_Manager::SWITCHER,
'label_on' => __('Show', 'elementskit'),
'label_off' => __('Hide', 'elementskit'),
'return_value' => 'yes',
'default' => 'yes',
]
);
$this->add_control(
'ekit_bresdcroum_separate_icon',
[
'label' => esc_html__('Separate Icon', 'elementskit'),
'type' => Controls_Manager::ICONS,
'label_block' => false,
'skin' => 'inline',
'skin_settings' => [
'inline' => [
'none' => [
'label' => esc_html__( 'Default', 'elementskit' ),
'icon' => 'fas fa-angle-double-right',
],
],
],
'condition' => [
'ekit_bresdcroum_separate_icon_show' => 'yes',
],
]
);
$this->add_control(
'ekit_breadcrumb_len',
[
'label' => __('Max Title word length', 'elementskit'),
'type' => \Elementor\Controls_Manager::NUMBER,
'min' => 5,
'max' => 100,
'step' => 1,
'default' => 15,
]
);
$this->add_control(
'ekit_breadcrumb_show_trail',
[
'label' => __('Show category trail', 'elementskit'),
'type' => \Elementor\Controls_Manager::SWITCHER,
'label_on' => __('Show', 'elementskit'),
'label_off' => __('Hide', 'elementskit'),
'return_value' => 'yes',
'default' => '',
]
);
$this->end_controls_section();
$this->start_controls_section(
'ekit_section_breadcrumbs_style',
[
'label' => esc_html__('Style', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'ekit_breadcrumb_text_color',
[
'label' => esc_html__('Text Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)' => 'color: {{VALUE}}',
],
]
);
$this->add_control(
'ekit_breadcrumb_link_color',
[
'label' => esc_html__('Link Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li > a' => 'color: {{VALUE}};',
'{{WRAPPER}} .ekit-breadcrumb > li > span.ekit_home_icon' => 'color: {{VALUE}};',
'{{WRAPPER}} .ekit-breadcrumb > li > span.ekit_home_icon svg' => 'fill: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_breadcrumb_link_hover_color',
[
'label' => esc_html__('Link Hover Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:hover > a' => 'color: {{VALUE}}',
'{{WRAPPER}} .ekit-breadcrumb > li:hover > span.ekit_home_icon' => 'color: {{VALUE}};',
'{{WRAPPER}} .ekit-breadcrumb > li:hover > span.ekit_home_icon svg' => 'fill: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_breadcrumb_typography',
'selector' => '{{WRAPPER}} .ekit-breadcrumb',
'exclude' => ['text_decoration', 'letter_spacing'],
'fields_options' => [
'typography' => [
'default' => 'custom',
],
'font_size' => [
'default' => [
'size' => '',
'unit' => 'px'
],
'label' => 'Font size (px)',
'size_units' => ['px'],
],
'font_weight' => [
'default' => '',
],
'text_transform' => [
'default' => '',
],
'line_height' => [
'default' => [
'size' => '',
'unit' => 'px'
]
],
'letter_spacing' => [
'default' => [
'size' => '',
]
],
],
]
);
$this->add_responsive_control(
'ekit_breadcrumbs_alignment',
[
'label' => esc_html__('Alignment', 'elementskit'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'start' => [
'title' => esc_html__('Left', 'elementskit'),
'icon' => 'eicon-text-align-left',
],
'center' => [
'title' => esc_html__('Center', 'elementskit'),
'icon' => 'eicon-text-align-center',
],
'end' => [
'title' => esc_html__('Right', 'elementskit'),
'icon' => 'eicon-text-align-right',
],
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb' => 'justify-content: {{VALUE}};',
]
]
);
$this->end_controls_section();
$this->start_controls_section(
'ekit_breadcrumb_style_section',
[
'label' => esc_html__('Breadcrumb', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'ekit_breadcrumb_space_between',
[
'label' => esc_html__('Padding', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%'],
'default' => [
'top' => '',
'right' => '5',
'bottom' => '',
'left' => '',
'unit' => 'px',
'isLinked' => false,
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'ekit_breadcrumb_space_between_margin',
[
'label' => esc_html__('Margin', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%'],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'ekit_breadcrumb_box_shadow',
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)',
]
);
$this->start_controls_tabs(
'ekit_breadcrumb_tab_section'
);
$this->start_controls_tab(
'ekit_breadcrumb_normal_tab',
[
'label' => esc_html__('Normal', 'elementskit'),
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_background_normal',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Item Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep, :last-of-type)',
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_background_active',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Active Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(:last-of-type)',
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'ekit_breadcrumb_hover_tab',
[
'label' => esc_html__('Hover', 'elementskit'),
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_background_hover',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Item Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep, :last-of-type):hover',
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_background_active_hover',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Active Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(:last-of-type):hover',
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_control(
'ekit_breadcrumb_border_options',
[
'label' => esc_html__('Border Options', 'elementskit'),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_breadcrumb_item_border',
'fields_options' => [
'border' => [
'label' => esc_html__('Item Border', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)',
]
);
$this->add_control(
'ekit_breadcrumb_item_border_radius',
[
'label' => esc_html__('Item Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%'],
'default' => [
'unit' => 'px',
'size' => 5,
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:not(.brd_sep)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
$this->start_controls_section(
'ekit_section_breadcrumbs_icon',
[
'label' => esc_html__('Icon', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'ekit_breadcrumb_home_icon_options_icon',
[
'label' => esc_html__('Home icon', 'elementskit'),
'type' => Controls_Manager::HEADING,
'condition' => [
'ekit_bresdcroum_home_icon[value]!' => '',
],
]
);
$this->add_control(
'ekit_breadcrumb_home_icon_color',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb .ekit_breadcrumbs_start .ekit_home_icon' => 'color: {{VALUE}}',
'{{WRAPPER}} .ekit-breadcrumb .ekit_breadcrumbs_start .ekit_home_icon svg' => 'fill: {{VALUE}}',
],
'condition' => [
'ekit_bresdcroum_home_icon[value]!' => '',
],
]
);
$this->add_control(
'ekit_breadcrumb_home_space_between',
[
'label' => esc_html__('Space Between', 'elementskit'),
'type' => Controls_Manager::SLIDER,
'size_units' => [ 'px', '%', 'custom' ],
'default' => [
'unit' => 'px',
'size' => 5,
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb .ekit_breadcrumbs_start .ekit_home_icon' => 'margin-right: {{SIZE}}{{UNIT}};',
],
'condition' => [
'ekit_bresdcroum_home_icon[value]!' => '',
],
]
);
$this->add_responsive_control(
'ekit_breadcrumb_home_icon_size',
[
'label' => esc_html__( 'Size', 'elementskit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => [ 'px', '%', 'em', 'rem' ],
'range' => [
'px' => [
'min' => 6,
'max' => 300,
],
],
'condition' => [
'ekit_bresdcroum_home_icon[value]!' => '',
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb .ekit_breadcrumbs_start .ekit_home_icon' => 'font-size: {{SIZE}}{{UNIT}};',
],
'separator' => "after"
]
);
$this->add_control(
'ekit_breadcrumb_separator_icon',
[
'label' => esc_html__('Separator icon', 'elementskit'),
'type' => Controls_Manager::HEADING,
]
);
$this->add_responsive_control(
'ekit_breadcrumb_space_icon',
[
'label' => esc_html__('Padding', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%'],
'default' => [
'unit' => 'px',
'size' => 5,
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'ekit_breadcrumb_icon_size',
[
'label' => esc_html__( 'Size', 'elementskit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => [ 'px', '%', 'em', 'rem' ],
'range' => [
'px' => [
'min' => 6,
'max' => 300,
],
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep) .separate_icon ' => 'font-size: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'ekit_breadcrumb_box_shadow_icon',
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)',
]
);
$this->start_controls_tabs(
'ekit_breadcrumb_space_icon_tabs'
);
$this->start_controls_tab(
'ekit_breadcrumb_space_icon_normal',
[
'label' => esc_html__( 'Normal', 'elementskit' ),
]
);
$this->add_control(
'ekit_breadcrumb_icon_color_normal',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)' => 'color: {{VALUE}}',
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep) svg' => 'fill: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_icon_background_normal',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)',
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'ekit_breadcrumb_space_icon_hover',
[
'label' => esc_html__( 'Hover', 'elementskit' ),
]
);
$this->add_control(
'ekit_breadcrumb_icon_color_hover',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '',
'alpha' => false,
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep):hover' => 'color: {{VALUE}}',
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep):hover svg' => 'fill: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'ekit_breadcrumb_space_icon_background_hover',
'types' => [ 'classic', 'gradient'],
'exclude' => ['image'],
'fields_options' => [
'background' => [
'label' => esc_html__('Background', 'elementskit'),
]
],
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep):hover',
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_breadcrumb_icon_border',
'fields_options' => [
'border' => [
'label' => esc_html__('Border', 'elementskit'),
]
],
'separator' => 'before',
'selector' => '{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)',
]
);
$this->add_control(
'ekit_breadcrumb_icon_border_radius',
[
'label' => esc_html__('Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%'],
'default' => [
'unit' => 'px',
'size' => 5,
],
'selectors' => [
'{{WRAPPER}} .ekit-breadcrumb > li:is(.brd_sep)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
protected function render() {
echo '<div class="ekit-wid-con" >';
$this->render_raw();
echo '</div>';
}
protected function render_raw() {
$settings = $this->get_settings_for_display();
$pid = get_the_ID();
$max_len = empty($settings['ekit_breadcrumb_len']) ? 15 : intval($settings['ekit_breadcrumb_len']);
$trail = !empty($settings['ekit_breadcrumb_show_trail']);
echo $this->get_crumb($settings, $pid, $max_len, $trail);
}
private function get_crumb($settings, $post_id, $max_len, $trail = false) {
$ret = '<ol class="ekit-breadcrumb">';
// separator breadcrumbs icon
$sep = '';
if($settings['ekit_bresdcroum_separate_icon_show'] === 'yes') {
$separate_icon = Icons_Manager::try_get_icon_html($settings['ekit_bresdcroum_separate_icon'],[ 'aria-hidden' => 'true' ]);
$separate_icon_tag = '<span class="separate_icon">'. $separate_icon .'</span>';
$sep = !empty( $settings['ekit_bresdcroum_separate_icon']['value']) ? ' <li class="brd_sep">' . $separate_icon_tag . '</li> ' : ' <li class="brd_sep"> » </li> ' ;
}
// home breadcrumb icon
$icon = Icons_Manager::try_get_icon_html($settings['ekit_bresdcroum_home_icon'],[ 'aria-hidden' => 'true' ]);
$icon_tag = !empty($settings['ekit_bresdcroum_home_icon']['value']) ? '<span class="ekit_home_icon"> '.$icon.' </span>' : '';
$ret .= '<li class="ekit_breadcrumbs_start">' . $icon_tag . '<a href="' . get_home_url('/') .'">' . __('Home', 'elementskit') . '</a></li>';
if(!is_home()) {
if(is_category() || is_single() || is_archive()) {
$category = get_the_category();
if(!empty($category)) {
$cat = $category[0];
$term_parent = $cat->parent;
$taxonomy = $cat->taxonomy;
$p_trail = '';
if($trail === true) {
if(0 !== $term_parent) {
while($term_parent) {
$term = get_term($term_parent, $taxonomy);
$term_parent = $term->parent;
$p_trail = $sep . '<li><a href="' . get_term_link($term) . '">' . $term->name . '</a></li>' . $p_trail;
}
}
}
$ret .= $p_trail . $sep . '<li><a href="' . get_category_link($cat->term_id) . '">' . $cat->cat_name . '</a></li>';
} else {
$p_type = get_post_type($post_id);
$post_type = get_post_type_object($p_type);
if(!empty($post_type->labels->singular_name) && !in_array($post_type->name, ['post', 'page'])) {
$ret .= $sep . '<li><a href="' . get_post_type_archive_link($p_type) . '">' . $post_type->labels->singular_name . '</a></li>';
}
}
if(is_single()) {
$ret .= $this->render_parent_posts($post_id, $max_len, $sep);
}
} elseif(is_page()) {
$ret .= $this->render_parent_posts($post_id, $max_len, $sep);
}
} elseif(is_home()) {
$page_for_posts = get_option('page_for_posts');
$ret .= $page_for_posts ? $this->render_parent_posts($page_for_posts, $max_len, $sep) : sprintf('%1$s <li>%2$s</li>', $sep, esc_html__('Posts', 'elementskit'));
}
if(is_tag() ) {
$ret .= '<li>' . single_tag_title() . '</li>';
} elseif(is_day()) {
$ret .= '<li>' . esc_html__('Blogs for', 'elementskit') . ' ' . get_the_time('F jS, Y', $post_id) . '</li>';
} elseif(is_month()) {
$ret .= '<li>' . esc_html__('Blogs for', 'elementskit') . ' ' . get_the_time('F, Y', $post_id) . '</li>';
} elseif(is_year()) {
$ret .= '<li>' . esc_html__('Blogs for', 'elementskit') . ' ' . get_the_time('Y', $post_id) . '</li>';
} elseif(is_author()) {
$ret .= $sep . '<li>' . esc_html__('Author Blogs', 'elementskit') . '</li>';
} elseif(isset($_GET['paged']) && !empty($_GET['paged'])) {
$ret .= $sep .'<li>' . esc_html__('Blogs', 'elementskit') . '</li>';
} elseif(is_search()) {
//the_search_query()
$ret .= $sep . '<li>' . esc_html__('Search Result', 'elementskit') . '</li>';
} elseif(is_404()) {
$ret .= $sep . '<li>' . esc_html__('404 Not Found', 'elementskit') . '</li>';
}
$ret .= '</ol>';
return $ret;
}
public function render_parent_posts($post_id, $max_len, $sep) {
$page_items = [];
$page_items[] = sprintf(
'%1$s <li>%2$s</li>',
$sep,
(is_home() && get_option('page_for_posts')) ? wp_trim_words(get_the_title(get_option('page_for_posts')), $max_len) : wp_trim_words(get_the_title(), $max_len)
);
$post = get_post($post_id);
while( $post->post_parent ) {
$page_items[] = $sep . '<li><a href="'.get_permalink($post->post_parent).'" title="'.get_the_title($post->post_parent).'">'.get_the_title($post->post_parent).'</a></li>';
$post = get_post($post->post_parent);
}
$page_items = array_reverse($page_items);
$page_list = implode('', $page_items);
return $page_list;
}
}