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() {
}
}