File "breadcrumbs.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/powerpack-elements142/modules/breadcrumbs/widgets/breadcrumbs.php
File size: 50.15 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php
namespace PowerpackElements\Modules\Breadcrumbs\Widgets;

use PowerpackElements\Base\Powerpack_Widget;

// Elementor Classes
use Elementor\Controls_Manager;
use Elementor\Utils;
use Elementor\Group_Control_Background;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Typography;
use Elementor\Scheme_Typography;
use Elementor\Scheme_Color;
use Elementor\Modules\DynamicTags\Module as TagsModule;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Breadcrumbs Widget
 */
class Breadcrumbs extends Powerpack_Widget {
    
    /**
	 * Retrieve breadcrumbs widget name.
	 *
	 * @access public
	 *
	 * @return string Widget name.
	 */
    public function get_name() {
        return 'pp-breadcrumbs';
    }

    /**
	 * Retrieve breadcrumbs widget title.
	 *
	 * @access public
	 *
	 * @return string Widget title.
	 */
    public function get_title() {
        return __( 'Breadcrumbs', 'powerpack' );
    }

    /**
	 * Retrieve the list of categories the breadcrumbs widget belongs to.
	 *
	 * Used to determine where to display the widget in the editor.
	 *
	 * @access public
	 *
	 * @return array Widget categories.
	 */
    public function get_categories() {
        return [ 'power-pack' ];
    }

    /**
	 * Retrieve breadcrumbs widget icon.
	 *
	 * @access public
	 *
	 * @return string Widget icon.
	 */
    public function get_icon() {
        return 'ppicon-breadcrumbs power-pack-admin-icon';
    }

    /**
	 * Register breadcrumbs widget controls.
	 *
	 * Adds different input fields to allow the user to change and customize the widget settings.
	 *
	 * @access protected
	 */
    protected function _register_controls() {

        /*-----------------------------------------------------------------------------------*/
        /*	CONTENT TAB
        /*-----------------------------------------------------------------------------------*/
        
        /**
         * Content Tab: Breadcrumbs
         * -------------------------------------------------
         */
        $this->start_controls_section(
            'section_breadcrumbs',
            [
                'label'                 => __( 'Breadcrumbs', 'powerpack' ),
            ]
        );
        
        $this->add_control(
            'show_home',
            [
                'label'                 => __( 'Show Home', 'powerpack' ),
                'type'                  => Controls_Manager::SWITCHER,
                'default'               => 'yes',
                'label_on'              => __( 'On', 'powerpack' ),
                'label_off'             => __( 'Off', 'powerpack' ),
                'return_value'          => 'yes',
            ]
        );

        $this->add_control(
            'home_text',
            [
                'label'                 => __( 'Home Text', 'powerpack' ),
                'type'                  => Controls_Manager::TEXT,
                'default'               => __( 'Home', 'powerpack' ),
                'dynamic'               => [
                    'active'        => true,
                    'categories'    => [ TagsModule::POST_META_CATEGORY ]
                ],
                'condition'             => [
                    'show_home'     => 'yes'
                ],
            ]
        );

        $this->add_control(
            'home_icon',
            [
                'label'                 => __( 'Home Icon', 'powerpack' ),
                'type'                  => Controls_Manager::ICON,
                'label_block'           => false,
                'default'               => 'fa fa-home',
                'condition'             => [
                    'show_home'     => 'yes'
                ],
            ]
        );

        $this->add_control(
            'blog_text',
            [
                'label'                 => __( 'Blog Text', 'powerpack' ),
                'type'                  => Controls_Manager::TEXT,
                'default'               => __( 'Blog', 'powerpack' ),
                'dynamic'               => [
                    'active'        => true,
                    'categories'    => [ TagsModule::POST_META_CATEGORY ]
                ],
            ]
        );
        
        $this->add_responsive_control(
			'align',
			[
				'label'                 => __( 'Alignment', 'powerpack' ),
				'type'                  => Controls_Manager::CHOOSE,
				'default'               => '',
				'options'               => [
                    'left'      => [
                        'title' => __( 'Left', 'powerpack' ),
                        'icon'  => 'eicon-h-align-left',
                    ],
                    'center'    => [
                        'title' => __( 'Center', 'powerpack' ),
                        'icon'  => 'eicon-h-align-center',
                    ],
                    'right'     => [
                        'title' => __( 'Right', 'powerpack' ),
                        'icon'  => 'eicon-h-align-right',
                    ],
				],
				'selectors_dictionary'  => [
					'left'      => 'flex-start',
					'center'    => 'center',
					'right'     => 'flex-end',
				],
                'separator'             => 'before',
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs'   => 'justify-content: {{VALUE}};',
				],
			]
		);
        
        $this->end_controls_section();
        
        /**
         * Content Tab: Separator
         * -------------------------------------------------
         */
        $this->start_controls_section(
            'section_separator',
            [
                'label'                 => __( 'Separator', 'powerpack' ),
            ]
        );

        $this->add_control(
            'separator_type',
            [
                'label'                 => __( 'Separator Type', 'powerpack' ),
                'type'                  => Controls_Manager::SELECT,
                'default'               => 'icon',
                'options'               => [
                    'text'          => __( 'Text', 'powerpack' ),
                    'icon'          => __( 'Icon', 'powerpack' ),
                ],
            ]
        );

        $this->add_control(
            'separator_text',
            [
                'label'                 => __( 'Separator', 'powerpack' ),
                'type'                  => Controls_Manager::TEXT,
                'default'               => __( '>', 'powerpack' ),
                'condition'             => [
                    'separator_type'    => 'text'
                ],
            ]
        );

        $this->add_control(
            'separator_icon',
            [
                'label'                 => __( 'Separator', 'powerpack' ),
                'type'                  => Controls_Manager::ICON,
                'label_block'           => false,
                'default'               => 'fa fa-angle-right',
                'condition'             => [
                    'separator_type'    => 'icon'
                ],
            ]
        );
        
        $this->end_controls_section();

        /*-----------------------------------------------------------------------------------*/
        /*	STYLE TAB
        /*-----------------------------------------------------------------------------------*/

        /**
         * Style Tab: Items
         * -------------------------------------------------
         */
        $this->start_controls_section(
            'section_breadcrumbs_style',
            [
                'label'                 => __( 'Items', 'powerpack' ),
                'tab'                   => Controls_Manager::TAB_STYLE,
            ]
        );

        $this->add_control(
            'breadcrumbs_items_spacing',
            [
                'label'                 => __( 'Spacing', 'powerpack' ),
                'type'                  => Controls_Manager::SLIDER,
                'default'               => [
                    'size'	=> 10
                ],
                'range'                 => [
                    'px' 	=> [
                        'max' => 50,
                    ],
                ],
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs' => 'margin-left: -{{SIZE}}{{UNIT}};',
                    '{{WRAPPER}} .pp-breadcrumbs > li' => 'margin-left: {{SIZE}}{{UNIT}};',
                ],
            ]
        );

        $this->start_controls_tabs( 'tabs_breadcrumbs_style' );

        $this->start_controls_tab(
            'tab_breadcrumbs_normal',
            [
                'label'                 => __( 'Normal', 'powerpack' ),
            ]
        );

        $this->add_control(
            'breadcrumbs_background_color',
            [
                'label'                 => __( 'Background Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb' => 'background-color: {{VALUE}}',
                ],
            ]
        );

        $this->add_control(
            'breadcrumbs_color',
            [
                'label'                 => __( 'Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb' => 'color: {{VALUE}}',
                ],
            ]
        );
        
        $this->add_group_control(
            Group_Control_Typography::get_type(),
            [
                'name'                  => 'breadcrumbs_typography',
                'label'                 => __( 'Typography', 'powerpack' ),
                'selector'              => '{{WRAPPER}} .pp-breadcrumbs',
            ]
        );

		$this->add_group_control(
			Group_Control_Border::get_type(),
			[
				'name'                  => 'breadcrumbs_border',
				'label'                 => __( 'Border', 'powerpack' ),
				'placeholder'           => '1px',
				'default'               => '1px',
				'selector'              => '{{WRAPPER}} .pp-breadcrumbs-crumb',
			]
		);

		$this->add_control(
			'breadcrumbs_border_radius',
			[
				'label'                 => __( 'Border Radius', 'powerpack' ),
				'type'                  => Controls_Manager::DIMENSIONS,
				'size_units'            => [ 'px', '%' ],
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs-crumb' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

        $this->end_controls_tab();

        $this->start_controls_tab(
            'tab_breadcrumbs_hover',
            [
                'label'                 => __( 'Hover', 'powerpack' ),
            ]
        );

        $this->add_control(
            'breadcrumbs_background_color_hover',
            [
                'label'                 => __( 'Background Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb-link:hover' => 'background-color: {{VALUE}}',
                ],
            ]
        );

        $this->add_control(
            'breadcrumbs_color_hover',
            [
                'label'                 => __( 'Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb-link:hover' => 'color: {{VALUE}}',
                ],
            ]
        );

        $this->add_control(
            'breadcrumbs_border_color_hover',
            [
                'label'                 => __( 'Border Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb-link:hover' => 'border-color: {{VALUE}}',
                ],
            ]
        );

        $this->end_controls_tab();

        $this->end_controls_tabs();

		$this->add_responsive_control(
			'breadcrumbs_padding',
			[
				'label'                 => __( 'Padding', 'powerpack' ),
				'type'                  => Controls_Manager::DIMENSIONS,
				'size_units'            => [ 'px', '%' ],
                'separator'             => 'before',
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs-crumb' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

        $this->end_controls_section();

        /**
         * Style Tab: Separators
         * -------------------------------------------------
         */
        $this->start_controls_section(
            'section_separators_style',
            [
                'label'                 => __( 'Separators', 'powerpack' ),
                'tab'                   => Controls_Manager::TAB_STYLE,
            ]
        );

        $this->add_control(
            'separators_background_color',
            [
                'label'                 => __( 'Background Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-separator' => 'background-color: {{VALUE}}',
                ],
            ]
        );

        $this->add_control(
            'separators_color',
            [
                'label'                 => __( 'Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-separator' => 'color: {{VALUE}}',
                ],
            ]
        );
        
        $this->add_group_control(
            Group_Control_Typography::get_type(),
            [
                'name'                  => 'separators_typography',
                'label'                 => __( 'Typography', 'powerpack' ),
                'selector'              => '{{WRAPPER}} .pp-breadcrumbs-separator',
            ]
        );

		$this->add_group_control(
			Group_Control_Border::get_type(),
			[
				'name'                  => 'separators_border',
				'label'                 => __( 'Border', 'powerpack' ),
				'placeholder'           => '1px',
				'default'               => '1px',
				'selector'              => '{{WRAPPER}} .pp-breadcrumbs-separator',
			]
		);

		$this->add_control(
			'separators_border_radius',
			[
				'label'                 => __( 'Border Radius', 'powerpack' ),
				'type'                  => Controls_Manager::DIMENSIONS,
				'size_units'            => [ 'px', '%' ],
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs-separator' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_responsive_control(
			'separators_padding',
			[
				'label'                 => __( 'Padding', 'powerpack' ),
				'type'                  => Controls_Manager::DIMENSIONS,
				'size_units'            => [ 'px', '%' ],
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs-separator' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
        
        $this->end_controls_section();

        /**
         * Style Tab: Current
         * -------------------------------------------------
         */
        $this->start_controls_section(
            'section_current_style',
            [
                'label'                 => __( 'Current', 'powerpack' ),
                'tab'                   => Controls_Manager::TAB_STYLE,
            ]
        );

        $this->add_control(
            'current_background_color',
            [
                'label'                 => __( 'Background Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb-current' => 'background-color: {{VALUE}}',
                ],
            ]
        );

        $this->add_control(
            'current_color',
            [
                'label'                 => __( 'Color', 'powerpack' ),
                'type'                  => Controls_Manager::COLOR,
                'default'               => '',
                'selectors'             => [
                    '{{WRAPPER}} .pp-breadcrumbs-crumb-current' => 'color: {{VALUE}}',
                ],
            ]
        );
        
        $this->add_group_control(
            Group_Control_Typography::get_type(),
            [
                'name'                  => 'current_typography',
                'label'                 => __( 'Typography', 'powerpack' ),
                'selector'              => '{{WRAPPER}} .pp-breadcrumbs-crumb-current',
            ]
        );

		$this->add_group_control(
			Group_Control_Border::get_type(),
			[
				'name'                  => 'current_border',
				'label'                 => __( 'Border', 'powerpack' ),
				'placeholder'           => '1px',
				'default'               => '1px',
				'selector'              => '{{WRAPPER}} .pp-breadcrumbs-crumb-current',
			]
		);

		$this->add_control(
			'current_border_radius',
			[
				'label'                 => __( 'Border Radius', 'powerpack' ),
				'type'                  => Controls_Manager::DIMENSIONS,
				'size_units'            => [ 'px', '%' ],
				'selectors'             => [
					'{{WRAPPER}} .pp-breadcrumbs-crumb-current' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

        $this->end_controls_section();

    }

    /**
	 * Render breadcrumbs widget output on the frontend.
	 *
	 * Written in PHP and used to generate the final HTML.
	 *
	 * @access protected
	 */
    protected function render() {
        $settings = $this->get_settings_for_display();
        
        $query = $this->get_query();
        
        if ( $query ) {
			if ( $query->have_posts() ) {
                
                $this->render_breadcrumbs( $query );
                
                wp_reset_postdata();
				wp_reset_query();
            }
        } else {
            $this->render_breadcrumbs();
        }
    }
    
    protected function get_query() {
		$settings 	= $this->get_settings_for_display();
        
        global $post;

        $post_type = 'any';

        $args = array(
            'post_type' => $post_type,
        );

        // Posts Query
        $post_query = new \WP_Query( $args );

        //return $post_query;
        
        return false;
    }
    
    protected function render_breadcrumbs( $query = false ) {
		$settings = $this->get_settings_for_display();

		$this->add_render_attribute( 'breadcrumbs', 'class', 'pp-breadcrumbs' );
		$this->add_render_attribute( 'breadcrumbs-item', 'class', 'pp-breadcrumbs-item' );

        // If you have any custom post types with custom taxonomies, put the taxonomy name below (e.g. product_cat)
        $custom_taxonomy = 'product_cat';

        // Get the query & post information
        global $post, $wp_query;

		if ( $query === false ) {
			// Reset post data to parent query
			$wp_query->reset_postdata();

			// Set active query to native query
			$query = $wp_query;
		}

        // Do not display on the homepage
        if ( !$query->is_front_page() ) {

            // Build the breadcrums
            echo '<ul ' . $this->get_render_attribute_string( 'breadcrumbs' ) . '">';
            
            // Home page
            if ( $settings['show_home'] == 'yes' ) {
                $this->render_home_link();
            }

            if ( $query->is_archive() && !$query->is_tax() && !$query->is_category() && !$query->is_tag() ) {
                
                $this->add_render_attribute( 'breadcrumbs-item-archive', 'class', [
                    'pp-breadcrumbs-item',
                    'pp-breadcrumbs-item-current',
                    'pp-breadcrumbs-item-archive'
                ] );
                
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-archive' ) . '><strong class="bread-current bread-archive">' . post_type_archive_title( $prefix, false ) . '</strong></li>';
                
            } else if ( $query->is_archive() && $query->is_tax() && !$query->is_category() && !$query->is_tag() ) {

                // If post is a custom post type
                $post_type = get_post_type();

                // If it is a custom post type display name and link
                if ( $post_type != 'post' ) {

                    $post_type_object = get_post_type_object($post_type);
                    $post_type_archive = get_post_type_archive_link($post_type);
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-cpt' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-cat',
                                'pp-breadcrumbs-item-custom-post-type-' . $post_type
                            ]
                        ],
                        'breadcrumbs-item-cpt-crumb' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-link',
                                'pp-breadcrumbs-crumb-cat',
                                'pp-breadcrumbs-crumb-custom-post-type-' . $post_type
                            ],
                            'href'  => $post_type_archive,
                            'title' => $post_type_object->labels->name,
                        ]
                    ] );

                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-cpt' ) . '><a ' . $this->get_render_attribute_string( 'breadcrumbs-item-cpt-crumb' ) . '>' . $post_type_object->labels->name . '</a></li>';
                    
                    $this->render_separator();

                }
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-tax' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-archive'
                        ]
                    ],
                    'breadcrumbs-item-tax-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                        ],
                    ]
                ] );

                $custom_tax_name = get_queried_object()->name;
                
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-tax' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-tax-crumb' ) . '>' . $custom_tax_name . '</strong></li>';

            } else if ( $query->is_single() ) {

                // If post is a custom post type
                $post_type = get_post_type();

                // If it is a custom post type display name and link
                if ( $post_type != 'post' ) {

                    $post_type_object = get_post_type_object($post_type);
                    $post_type_archive = get_post_type_archive_link($post_type);
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-cpt' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-cat',
                                'pp-breadcrumbs-item-custom-post-type-' . $post_type
                            ]
                        ],
                        'breadcrumbs-item-cpt-crumb' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-link',
                                'pp-breadcrumbs-crumb-cat',
                                'pp-breadcrumbs-crumb-custom-post-type-' . $post_type
                            ],
                            'href'  => $post_type_archive,
                            'title' => $post_type_object->labels->name,
                        ]
                    ] );
                    
                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-cpt' ) . '><a ' . $this->get_render_attribute_string( 'breadcrumbs-item-cpt-crumb' ) . '>' . $post_type_object->labels->name . '</a></li>';
                    
                    $this->render_separator();

                }

                // Get post category info
                $category = get_the_category();

                if ( !empty( $category ) ) {

                    // Get last category post is in
                    $values = array_values( $category );
					
					$last_category = reset( $values );
					
					$categories = [];
					$get_cat_parents = rtrim( get_category_parents( $last_category->term_id, true, ',' ), ',' );
                    $cat_parents = explode( ',', $get_cat_parents );
					foreach($cat_parents as $parent){
						$categories[] = get_term_by('name', $parent, 'category');
					}

                    // Loop through parent categories and store in variable $cat_display
                    $cat_display = '';
					
					foreach( $categories as $parent ) {
						$cat_display .= '<li class="pp-breadcrumbs-item pp-breadcrumbs-item-cat"><a class="pp-breadcrumbs-crumb pp-breadcrumbs-crumb-link pp-breadcrumbs-crumb-cat" href="'. get_term_link( $parent ) .'">' . $parent->name . '</a></li>';
                        $cat_display .= $this->render_separator( false );
					}

                }

                // If it's a custom post type within a custom taxonomy
                $taxonomy_exists = taxonomy_exists( $custom_taxonomy );
                
                if( empty( $last_category ) && !empty( $custom_taxonomy ) && $taxonomy_exists ) {
                    $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
                    
                    if ( $taxonomy_terms ) {
                        $cat_id         = $taxonomy_terms[0]->term_id;
                        $cat_nicename   = $taxonomy_terms[0]->slug;
                        $cat_link       = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
                        $cat_name       = $taxonomy_terms[0]->name;
                    }
                }

                // Check if the post is in a category
                if( !empty( $last_category ) ) {
                    echo $cat_display;
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-post-cat' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-current',
                                'pp-breadcrumbs-item-' . $post->ID
                            ]
                        ],
                        'breadcrumbs-item-post-cat-bread' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-current',
                                'pp-breadcrumbs-crumb-' . $post->ID
                            ],
                            'title' => get_the_title(),
                        ]
                    ] );
                    
                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-cat' ) . '"><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-cat-bread' ) . '">' . get_the_title() . '</strong></li>';

                // Else if post is in a custom taxonomy
                } else if( !empty( $cat_id ) ) {
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-post-cpt' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-cat',
                                'pp-breadcrumbs-item-cat-' . $cat_id,
                                'pp-breadcrumbs-item-cat-' . $cat_nicename
                            ]
                        ],
                        'breadcrumbs-item-post-cpt-crumb' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-link',
                                'pp-breadcrumbs-crumb-cat',
                                'pp-breadcrumbs-crumb-cat-' . $cat_id,
                                'pp-breadcrumbs-crumb-cat-' . $cat_nicename,
                            ],
                            'href'  => $cat_link,
                            'title' => $cat_name,
                        ]
                    ] );

                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-cpt' ) . '"><a ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-cpt-crumb' ) . '</a></li>';
                    
                    $this->render_separator();
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-post' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-current',
                                'pp-breadcrumbs-item-' . $post->ID,
                            ]
                        ],
                        'breadcrumbs-item-post-crumb' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-current',
                                'pp-breadcrumbs-crumb-' . $post->ID,
                            ],
                            'title' => get_the_title(),
                        ]
                    ] );
                    
                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-post' ) . '"><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-crumb' ) . '">' . get_the_title() . '</strong></li>';

                } else {
                
                    $this->add_render_attribute( [
                        'breadcrumbs-item-post' => [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-current',
                                'pp-breadcrumbs-item-' . $post->ID,
                            ]
                        ],
                        'breadcrumbs-item-post-crumb' => [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-current',
                                'pp-breadcrumbs-crumb-' . $post->ID,
                            ],
                            'title' => get_the_title(),
                        ]
                    ] );

                    echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-post' ) . '"><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-post-crumb' ) . '">' . get_the_title() . '</strong></li>';

                }

            } else if ( $query->is_category() ) {
                
                    $this->add_render_attribute([
                        'breadcrumbs-item-cat' =>  [
                            'class' => [
                                'pp-breadcrumbs-item',
                                'pp-breadcrumbs-item-current',
                                'pp-breadcrumbs-item-cat'
                            ]
                        ],
                        'breadcrumbs-item-cat-bread' =>  [
                            'class' => [
                                'pp-breadcrumbs-crumb',
                                'pp-breadcrumbs-crumb-current',
                                'pp-breadcrumbs-crumb-cat'
                            ]
                        ]
                    ]);

                // Category page
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-cat' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-cat-bread' ) . '>' . single_cat_title('', false) . '</strong></li>';

            } else if ( $query->is_page() ) {

                // Standard page
                if ( $post->post_parent ) {

                    // If child page, get parents 
                    $anc = get_post_ancestors( $post->ID );

                    // Get parents in the right order
                    $anc = array_reverse( $anc );

                    // Parent page loop
                    if ( !isset( $parents ) ) $parents = null;
                    foreach ( $anc as $ancestor ) {
                        $parents .= '<li class="pp-breadcrumbs-item pp-breadcrumbs-item-parent pp-breadcrumbs-item-parent-' . $ancestor . '"><a class="pp-breadcrumbs-crumb pp-breadcrumbs-crumb-link pp-breadcrumbs-crumb-parent pp-breadcrumbs-crumb-parent-' . $ancestor . '" href="' . get_permalink( $ancestor ) . '" title="' . get_the_title( $ancestor ) . '">' . get_the_title( $ancestor ) . '</a></li>';

                        $parents .= $this->render_separator( false );
                    }

                    // Display parent pages
                    echo $parents;

                }
                
                $this->add_render_attribute([
                    'breadcrumbs-item-page' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-' . $post->ID
                        ]
                    ],
                    'breadcrumbs-item-page-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-' . $post->ID
                        ],
                        'title' => get_the_title()
                    ]
                ]);

                // Just display current page if not parents
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-page' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-page-crumb' ) . '>' . get_the_title() . '</strong></li>';

            } else if ( $query->is_tag() ) {

                // Tag page

                // Get tag information
                $term_id        = get_query_var('tag_id');
                $taxonomy       = 'post_tag';
                $args           = 'include=' . $term_id;
                $terms          = get_terms( $taxonomy, $args );
                $get_term_id    = $terms[0]->term_id;
                $get_term_slug  = $terms[0]->slug;
                $get_term_name  = $terms[0]->name;
                
                $this->add_render_attribute([
                    'breadcrumbs-item-tag' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-tag-' . $get_term_id,
                            'pp-breadcrumbs-item-tag-' . $get_term_slug
                        ]
                    ],
                    'breadcrumbs-item-tag-bread' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-tag-' . $get_term_id,
                            'pp-breadcrumbs-crumb-tag-' . $get_term_slug
                        ],
                        'title' => get_the_title()
                    ]
                ]);

                // Display the tag name
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-tag' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-tag-bread' ) . '>' . $get_term_name . '</strong></li>';

            } elseif ( $query->is_day() ) {
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-year' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-year',
                            'pp-breadcrumbs-item-year-' . get_the_time('Y')
                        ]
                    ],
                    'breadcrumbs-item-year-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-link',
                            'pp-breadcrumbs-crumb-year',
                            'pp-breadcrumbs-crumb-year-' . get_the_time('Y')
                        ],
                        'href'  => get_year_link( get_the_time('Y') ),
                        'title' => get_the_time('Y'),
                    ],
                    'breadcrumbs-item-month' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-month',
                            'pp-breadcrumbs-item-month-' . get_the_time('m')
                        ]
                    ],
                    'breadcrumbs-item-month-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-link',
                            'pp-breadcrumbs-crumb-month',
                            'pp-breadcrumbs-crumb-month-' . get_the_time('m')
                        ],
                        'href'  => get_month_link( get_the_time('Y'), get_the_time('m') ),
                        'title' => get_the_time('M')
                    ],
                    'breadcrumbs-item-day' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-' . get_the_time('j')
                        ]
                    ],
                    'breadcrumbs-item-day-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-' . get_the_time('j')
                        ],
                    ]
                ] );

                // Year link
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-year' ) . '><a ' . $this->get_render_attribute_string( 'breadcrumbs-item-year-crumb' ) . '>' . get_the_time('Y') . ' ' . __( 'Archives', 'powerpack') . '</a></li>';
                
                $this->render_separator();

                // Month link
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-month' ) . '><a ' . $this->get_render_attribute_string( 'breadcrumbs-item-month-crumb' ) . '>' . get_the_time('M') . ' ' . __( 'Archives', 'powerpack') . '</a></li>';
                
                $this->render_separator();

                // Day display
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-day' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-day-crumb' ) . '> ' . get_the_time('jS') . ' ' . get_the_time('M') . ' ' . __( 'Archives', 'powerpack') . '</strong></li>';

            } else if ( $query->is_month() ) {
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-year' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-year',
                            'pp-breadcrumbs-item-year-' . get_the_time('Y')
                        ]
                    ],
                    'breadcrumbs-item-year-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-year',
                            'pp-breadcrumbs-crumb-year-' . get_the_time('Y')
                        ],
                        'href'  => get_year_link( get_the_time('Y') ),
                        'title' => get_the_time('Y'),
                    ],
                    'breadcrumbs-item-month' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-month',
                            'pp-breadcrumbs-item-month-' . get_the_time('m')
                        ]
                    ],
                    'breadcrumbs-item-month-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-month',
                            'pp-breadcrumbs-crumb-month-' . get_the_time('m')
                        ],
                        'title' => get_the_time('M')
                    ]
                ] );

                // Year link
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-year' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-year-crumb' ) . '>' . get_the_time('Y') . ' ' . __( 'Archives', 'powerpack' ) . '</strong></li>';
                
                $this->render_separator();

                // Month display
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-month' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-month-crumb' ) . '>' . get_the_time('M') . ' ' . __( 'Archives', 'powerpack' ) . '</strong></li>';

            } else if ( $query->is_year() ) {
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-year' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-current-' . get_the_time('Y')
                        ]
                    ],
                    'breadcrumbs-item-year-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-current-' . get_the_time('Y')
                        ],
                        'title' => get_the_time('Y'),
                    ]
                ] );

                // Display year archive
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-year' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-year-crumb' ) . '>' . get_the_time('Y') . ' ' . __( 'Archives', 'powerpack' ) . '</strong></li>';

            } else if ( $query->is_author() ) {

                // Get the author information
                global $author;
                $userdata = get_userdata( $author );
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-author' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-current-' . $userdata->user_nicename
                        ]
                    ],
                    'breadcrumbs-item-author-bread' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-current-' . $userdata->user_nicename
                        ],
                        'title' => $userdata->display_name
                    ]
                ] );

                // Display author name
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-author' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-author-bread' ) . '>' . __( 'Author:', 'powerpack' ) . ' ' . $userdata->display_name . '</strong></li>';

            } else if ( get_query_var('paged') ) {
                
                $this->add_render_attribute( [
                    'breadcrumbs-item-paged' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-current-' . get_query_var('paged')
                        ]
                    ],
                    'breadcrumbs-item-paged-bread' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-current-' . get_query_var('paged'),
                        ],
                        'title' => __( 'Page', 'powerpack' ) . ' ' . get_query_var('paged'),
                    ]
                ] );

                // Paginated archives
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-paged' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-paged-bread' ) . '>' . __('Page', 'powerpack') . ' ' . get_query_var('paged') . '</strong></li>';

            } else if ( $query->is_search() ) {
                
                // Search results page
                $this->add_render_attribute( [
                    'breadcrumbs-item-search' => [
                        'class' => [
                            'pp-breadcrumbs-item',
                            'pp-breadcrumbs-item-current',
                            'pp-breadcrumbs-item-current-' . get_search_query()
                        ]
                    ],
                    'breadcrumbs-item-search-crumb' => [
                        'class' => [
                            'pp-breadcrumbs-crumb',
                            'pp-breadcrumbs-crumb-current',
                            'pp-breadcrumbs-crumb-current-' . get_search_query(),
                        ],
                        'title' => __( 'Search results for:', 'powerpack' ) . ' '  . get_search_query()
                    ]
                ] );

                // Search results page
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-search' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-search-crumb' ) . '>' . __( 'Search results for:', 'powerpack' ) . ' '  . get_search_query() . '</strong></li>';

            } else if ( $query->is_home() ) {
				
				$blog_label = $settings['blog_text'];
                
				if ( $blog_label ) {
					$this->add_render_attribute([
						'breadcrumbs-item-blog' => [
							'class' => [
								'pp-breadcrumbs-item',
								'pp-breadcrumbs-item-current'
							]
						],
						'breadcrumbs-item-blog-crumb' => [
							'class' => [
								'pp-breadcrumbs-crumb',
								'pp-breadcrumbs-crumb-current',
							],
							'title' => $blog_label
						]
					]);

					// Just display current page if not parents
					echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-blog' ) . '><strong ' . $this->get_render_attribute_string( 'breadcrumbs-item-blog-crumb' ) . '>' . $blog_label . '</strong></li>';
				}

            } elseif ( $query->is_404() ) {
				$this->add_render_attribute([
					'breadcrumbs-item-error' => [
						'class' => [
							'pp-breadcrumbs-item',
							'pp-breadcrumbs-item-current'
						]
					]
				]);

                // 404 page
                echo '<li ' . $this->get_render_attribute_string( 'breadcrumbs-item-error' ) . '>' . __( 'Error 404', 'powerpack' ) . '</li>';
            }

            echo '</ul>';

        }

    }

	protected function get_separator() {
		$settings = $this->get_settings_for_display();

        if ( $settings['separator_type'] == 'icon' ) {

            $separator = '<i class="' . $settings['separator_icon'] . '"></i>';

        } else {

            $this->add_inline_editing_attributes( 'separator_text' );
            $this->add_render_attribute( 'separator_text', 'class', 'pp-breadcrumbs-separator-text' );

            $separator = '<span ' . $this->get_render_attribute_string( 'separator_text' ) . '>' . $settings['separator_text'] . '</span>';

        }
        
        return $separator;
	}

	protected function render_separator( $output = true ) {
		$settings = $this->get_settings_for_display();
        
		$html = '<li class="pp-breadcrumbs-separator">';
        $html .= $this->get_separator();
		$html .= '</li>';

		if ( $output === true ) {
			echo $html;
			return;
		}

		return $html;
	}

	protected function render_home_link() {
		$settings = $this->get_settings_for_display();

		$this->add_render_attribute( [
            'home_item' => [
                'class' => [
                    'pp-breadcrumbs-item',
                    'pp-breadcrumbs-item-home',
                ],
            ],
            'home_link' => [
                'class' => [
                    'pp-breadcrumbs-crumb',
                    'pp-breadcrumbs-crumb-link',
                    'pp-breadcrumbs-crumb-home'
                ],
                'href' 	=> get_home_url(),
                'title' => $settings['home_text']
            ],
            'home_text' => [
                'class' => [
                    'pp-breadcrumbs-text',
                ],
            ]
		] );
		?>
		<li <?php echo $this->get_render_attribute_string( 'home_item' ); ?>>
			<a <?php echo $this->get_render_attribute_string( 'home_link' ); ?>>
                <span <?php echo $this->get_render_attribute_string( 'home_text' ); ?>>
                    <?php if ( $settings['home_icon'] ) { ?>
                        <span class="<?php echo $settings['home_icon']; ?>"></span>
                    <?php } ?>
                    <?php echo $settings['home_text']; ?>
                </span>
			</a>
		</li>
		<?php

		$this->render_separator();

	}

    /**
	 * Render breadcrumbs widget output in the editor.
	 *
	 * Written as a Backbone JavaScript template and used to generate the live preview.
	 *
	 * @access protected
	 */
    protected function _content_template() {
    }

}