crumbs[] = array(
strip_tags($name),
$link
);
}
/**
* Reset crumbs.
*/
public function reset() {
$this->crumbs = array();
}
/**
* Get the breadcrumb.
*
* @return array
*/
public function get_breadcrumb() {
return apply_filters('azexo_get_breadcrumb', $this->crumbs, $this);
}
/**
* Generate breadcrumb trail.
*
* @return array of breadcrumbs
*/
public function generate() {
$conditionals = array(
'is_home',
'is_404',
'is_attachment',
'is_single',
'is_page',
'is_post_type_archive',
'is_category',
'is_tag',
'is_author',
'is_date',
'is_tax'
);
if (!is_front_page() || is_paged()) {
foreach ($conditionals as $conditional) {
if (call_user_func($conditional)) {
call_user_func(array($this, 'add_crumbs_' . substr($conditional, 3)));
break;
}
}
$this->search_trail();
$this->paged_trail();
return $this->get_breadcrumb();
}
return array();
}
/**
* is home trail.
*/
private function add_crumbs_home() {
$this->add_crumb(single_post_title('', false));
}
/**
* 404 trail.
*/
private function add_crumbs_404() {
$this->add_crumb(esc_html__('Error 404', 'azexo'));
}
/**
* attachment trail.
*/
private function add_crumbs_attachment() {
global $post;
$this->add_crumbs_single($post->post_parent, get_permalink($post->post_parent));
$this->add_crumb(get_the_title(), get_permalink());
}
/**
* Single post trail.
*
* @param int $post_id
* @param string $permalink
*/
private function add_crumbs_single($post_id = 0, $permalink = '') {
$current_post = false;
if (!$post_id) {
global $post;
$current_post = $post;
} else {
$current_post = get_post($post_id);
}
if ('post' != get_post_type($current_post)) {
$post_type = get_post_type_object(get_post_type($current_post));
$this->add_crumb($post_type->labels->singular_name, get_post_type_archive_link(get_post_type($current_post)));
} else {
$cat = current(get_the_category($current_post));
if ($cat) {
$this->term_ancestors($cat->term_id, 'post_category');
$this->add_crumb($cat->name, get_term_link($cat));
}
}
$this->add_crumb(get_the_title($current_post), $permalink);
}
/**
* Page trail.
*/
private function add_crumbs_page() {
global $post;
if ($post->post_parent) {
$parent_crumbs = array();
$parent_id = $post->post_parent;
while ($parent_id) {
$page = get_post($parent_id);
$parent_id = $page->post_parent;
$parent_crumbs[] = array(get_the_title($page->ID), get_permalink($page->ID));
}
$parent_crumbs = array_reverse($parent_crumbs);
foreach ($parent_crumbs as $crumb) {
$this->add_crumb($crumb[0], $crumb[1]);
}
}
$this->add_crumb(get_the_title(), get_permalink());
$this->endpoint_trail();
}
/**
* Post type archive trail.
*/
private function add_crumbs_post_type_archive() {
$post_type = get_post_type_object(get_post_type());
if ($post_type) {
$this->add_crumb($post_type->labels->singular_name, get_post_type_archive_link(get_post_type()));
}
}
/**
* Category trail.
*/
private function add_crumbs_category() {
$this_category = get_category($GLOBALS['wp_query']->get_queried_object());
if (0 != $this_category->parent) {
$this->term_ancestors($this_category->parent, 'post_category');
$this->add_crumb($this_category->name, get_category_link($this_category->term_id));
}
$this->add_crumb(single_cat_title('', false), get_category_link($this_category->term_id));
}
/**
* Tag trail.
*/
private function add_crumbs_tag() {
$queried_object = $GLOBALS['wp_query']->get_queried_object();
$this->add_crumb(sprintf(esc_html__('Posts tagged “%s”', 'azexo'), single_tag_title('', false)), get_tag_link($queried_object->term_id));
}
/**
* Add crumbs for date based archives.
*/
private function add_crumbs_date() {
if (is_year() || is_month() || is_day()) {
$this->add_crumb(get_the_time('Y'), get_year_link(get_the_time('Y')));
}
if (is_month() || is_day()) {
$this->add_crumb(get_the_time('F'), get_month_link(get_the_time('Y'), get_the_time('m')));
}
if (is_day()) {
$this->add_crumb(get_the_time('d'));
}
}
/**
* Add crumbs for taxonomies
*/
private function add_crumbs_tax() {
$this_term = $GLOBALS['wp_query']->get_queried_object();
$taxonomy = get_taxonomy($this_term->taxonomy);
$this->add_crumb($taxonomy->labels->name);
if (0 != $this_term->parent) {
$this->term_ancestors($this_term->term_id, $this_term->taxonomy);
}
$this->add_crumb(single_term_title('', false), get_term_link($this_term->term_id, $this_term->taxonomy));
}
/**
* Add a breadcrumb for author archives.
*/
private function add_crumbs_author() {
global $author;
$userdata = get_userdata($author);
$this->add_crumb(sprintf(esc_html__('Author: %s', 'azexo'), $userdata->display_name));
}
/**
* Add crumbs for a term.
* @param string $taxonomy
*/
private function term_ancestors($term_id, $taxonomy) {
$ancestors = get_ancestors($term_id, $taxonomy);
$ancestors = array_reverse($ancestors);
foreach ($ancestors as $ancestor) {
$ancestor = get_term($ancestor, $taxonomy);
if (!is_wp_error($ancestor) && $ancestor) {
$this->add_crumb($ancestor->name, get_term_link($ancestor));
}
}
}
/**
* Endpoints.
*/
private function endpoint_trail() {
}
/**
* Add a breadcrumb for search results.
*/
private function search_trail() {
if (is_search()) {
$this->add_crumb(sprintf(esc_html__('Search results for “%s”', 'azexo'), get_search_query()), remove_query_arg('paged'));
}
}
/**
* Add a breadcrumb for pagination.
*/
private function paged_trail() {
if (get_query_var('paged')) {
$this->add_crumb(sprintf(esc_html__('Page %d', 'azexo'), get_query_var('paged')));
}
}
}
function azexo_breadcrumb($args = array()) {
$args = wp_parse_args($args, apply_filters('azexo_breadcrumb_defaults', array(
'delimiter' => ' / ',
'wrap_before' => '',
'before' => '',
'after' => '',
'home' => esc_html__('Home', 'azexo')
)));
$breadcrumbs = new AZEXO_Breadcrumb();
if (!empty($args['home'])) {
$breadcrumbs->add_crumb($args['home'], apply_filters('azexo_breadcrumb_home_url', esc_url(home_url('/'))));
}
$args['breadcrumb'] = $breadcrumbs->generate();
extract($args);
if (!empty($breadcrumb)) {
print $wrap_before;
foreach ($breadcrumb as $key => $crumb) {
print $before;
if (!empty($crumb[1]) && sizeof($breadcrumb) !== $key + 1) {
print '' . esc_html($crumb[0]) . '';
} else {
print '' . esc_html($crumb[0]) . '';
}
print $after;
if (sizeof($breadcrumb) !== $key + 1) {
print $delimiter;
}
}
print $wrap_after;
}
}