Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
woocommerce
/
includes
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php defined('ABSPATH') || exit; class WC_Breadcrumb { protected $crumbs = array(); public function add_crumb($name, $link = '') { $this->crumbs[] = array(wp_strip_all_tags($name), $link); } public function reset() { $this->crumbs = array(); } public function get_breadcrumb() { return apply_filters('woocommerce_get_breadcrumb', $this->crumbs, $this); } public function generate() { $conditionals = array('is_home', 'is_404', 'is_attachment', 'is_single', 'is_product_category', 'is_product_tag', 'is_shop', 'is_page', 'is_post_type_archive', 'is_category', 'is_tag', 'is_author', 'is_date', 'is_tax'); if (!is_front_page() && !(is_post_type_archive() && intval(get_option('page_on_front')) === wc_get_page_id('shop')) || 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(); } protected function prepend_shop_page() { $permalinks = wc_get_permalink_structure(); $shop_page_id = wc_get_page_id('shop'); $shop_page = get_post($shop_page_id); if ($shop_page_id && $shop_page && isset($permalinks['product_base']) && strstr($permalinks['product_base'], '/' . $shop_page->post_name) && intval(get_option('page_on_front')) !== $shop_page_id) { $this->add_crumb(get_the_title($shop_page), get_permalink($shop_page)); } } protected function add_crumbs_home() { $this->add_crumb(single_post_title('', false)); } protected function add_crumbs_404() { $this->add_crumb(__('Error 404', 'woocommerce')); } protected 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()); } protected function add_crumbs_single($post_id = 0, $permalink = '') { if (!$post_id) { global $post; } else { $post = get_post($post_id); } if (!$permalink) { $permalink = get_permalink($post); } if ('product' === get_post_type($post)) { $this->prepend_shop_page(); $terms = wc_get_product_terms($post->ID, 'product_cat', apply_filters('woocommerce_breadcrumb_product_terms_args', array('orderby' => 'parent', 'order' => 'DESC'))); if ($terms) { $main_term = apply_filters('woocommerce_breadcrumb_main_term', $terms[0], $terms); $this->term_ancestors($main_term->term_id, 'product_cat'); $this->add_crumb($main_term->name, get_term_link($main_term)); } } elseif ('post' !== get_post_type($post)) { $post_type = get_post_type_object(get_post_type($post)); if (!empty($post_type->has_archive)) { $this->add_crumb($post_type->labels->singular_name, get_post_type_archive_link(get_post_type($post))); } } else { $cat = current(get_the_category($post)); if ($cat) { $this->term_ancestors($cat->term_id, 'category'); $this->add_crumb($cat->name, get_term_link($cat)); } } $this->add_crumb(get_the_title($post), $permalink); } protected 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(); } protected function add_crumbs_product_category() { $current_term = $GLOBALS['wp_query']->get_queried_object(); $this->prepend_shop_page(); $this->term_ancestors($current_term->term_id, 'product_cat'); $this->add_crumb($current_term->name, get_term_link($current_term, 'product_cat')); } protected function add_crumbs_product_tag() { $current_term = $GLOBALS['wp_query']->get_queried_object(); $this->prepend_shop_page(); $this->add_crumb(sprintf(__('Products tagged “%s”', 'woocommerce'), $current_term->name), get_term_link($current_term, 'product_tag')); } protected function add_crumbs_shop() { if (intval(get_option('page_on_front')) === wc_get_page_id('shop')) { return; } $_name = wc_get_page_id('shop') ? get_the_title(wc_get_page_id('shop')) : ''; if (!$_name) { $product_post_type = get_post_type_object('product'); $_name = $product_post_type->labels->name; } $this->add_crumb($_name, get_post_type_archive_link('product')); } protected function add_crumbs_post_type_archive() { $post_type = get_post_type_object(get_post_type()); if ($post_type) { $this->add_crumb($post_type->labels->name, get_post_type_archive_link(get_post_type())); } } protected function add_crumbs_category() { $this_category = get_category($GLOBALS['wp_query']->get_queried_object()); if (0 !== intval($this_category->parent)) { $this->term_ancestors($this_category->term_id, 'category'); } $this->add_crumb(single_cat_title('', false), get_category_link($this_category->term_id)); } protected function add_crumbs_tag() { $queried_object = $GLOBALS['wp_query']->get_queried_object(); $this->add_crumb(sprintf(__('Posts tagged “%s”', 'woocommerce'), single_tag_title('', false)), get_tag_link($queried_object->term_id)); } protected 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')); } } protected 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 !== intval($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)); } protected function add_crumbs_author() { global $author; $userdata = get_userdata($author); $this->add_crumb(sprintf(__('Author: %s', 'woocommerce'), $userdata->display_name)); } protected 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)); } } } protected function endpoint_trail() { $action = isset($_GET['action']) ? sanitize_text_field(wp_unslash($_GET['action'])) : ''; $endpoint = is_wc_endpoint_url() ? WC()->query->get_current_endpoint() : ''; $endpoint_title = $endpoint ? WC()->query->get_endpoint_title($endpoint, $action) : ''; if ($endpoint_title) { $this->add_crumb($endpoint_title); } } protected function search_trail() { if (is_search()) { $this->add_crumb(sprintf(__('Search results for “%s”', 'woocommerce'), get_search_query()), remove_query_arg('paged')); } } protected function paged_trail() { if (get_query_var('paged') && 'subcategories' !== woocommerce_get_loop_display_mode()) { $this->add_crumb(sprintf(__('Page %d', 'woocommerce'), get_query_var('paged'))); } } }