| | |
| | | private function __construct() |
| | | { |
| | | $this->cache = CacheManager::for('breadcrumbs', MONTH_IN_SECONDS)->connectTo('all'); |
| | | // $this->cache->clear(); |
| | | } |
| | | |
| | | public static function getInstance(): self |
| | |
| | | $crumbs = $this->addTaxonomyCrumbs($crumbs, $obj); |
| | | } elseif (is_singular()) { |
| | | $crumbs = $this->addArchiveCrumbs($crumbs, $obj); |
| | | $crumbs = $this->addSingularCrumbs($crumbs, $obj); |
| | | $hierarchy = $this->addSingularCrumbs($crumbs, $obj); |
| | | $crumbs = $crumbs + $hierarchy; |
| | | } elseif (is_post_type_archive() && !is_post_type_archive(BASE.'dash')) { |
| | | $crumbs = $this->addArchiveCrumbs($crumbs, $obj); |
| | | } |
| | |
| | | |
| | | // Add directory if exists |
| | | if (Features::forTaxonomy($tax)->has('directory')) { |
| | | $directory = jvbDirectories($tax); |
| | | $directory = JVB()->directories()?->directories($tax); |
| | | $crumbs[] = [ |
| | | 'name' => $directory['title'], |
| | | 'url' => $directory['url'] |
| | |
| | | private function addSingularCrumbs(array $crumbs, WP_Post $post): array |
| | | { |
| | | // Add directory if exists |
| | | $directory = jvbDirectories(jvbNoBase($post->post_type)); |
| | | if (!empty($directory)) { |
| | | $crumbs[] = [ |
| | | 'name' => $directory['title'], |
| | | 'url' => $directory['url'] |
| | | ]; |
| | | $content = jvbNoBase($post->post_type); |
| | | if(Features::forContent($content)->has('show_directory')) { |
| | | $directory = JVB()->directories()->getDirectoryList()[$content]??[]; |
| | | if (!empty($directory)) { |
| | | $crumbs[] = [ |
| | | 'name' => $directory['title'], |
| | | 'url' =>$directory['url'] |
| | | ]; |
| | | } |
| | | } |
| | | |
| | | // Handle directory posts specially |
| | | if (jvbIsDirectory()) { |
| | | if (JVB()->directories()->isDirectory()) { |
| | | $pos = jvbGetDirectoryInfo(); |
| | | if (!empty($pos)) { |
| | | // Special case for map |
| | | if ($pos['title'] == 'Map') { |
| | | $crumbs[] = [ |
| | | 'name' => 'Tattoo Shops', |
| | | 'url' => jvbDirectories(BASE.'shop')['url'] |
| | | 'url' => JVB()->directories()?->directories(BASE.'shop')['url'] |
| | | ]; |
| | | } |
| | | |
| | |
| | | ]; |
| | | } |
| | | } else { |
| | | $name = jvbNoBase($post->post_type); |
| | | if (Features::forContent($name)->has('addCrumb')) { |
| | | $this->addTaxToCrumbs($crumbs, JVB_CONTENT[$name]['addCrumb']); |
| | | } |
| | | // Add post hierarchy |
| | | $crumbs = array_merge($crumbs, $this->buildPostHierarchy($post)); |
| | | } |
| | |
| | | { |
| | | $type = is_singular() ? $obj->post_type : $obj->name; |
| | | $name = jvbNoBase($type); |
| | | if (array_key_exists($name, JVB_CONTENT)) { |
| | | |
| | | if (Features::forSite()->has('is_directory') && $name === 'directory') { |
| | | $crumbs[] = [ |
| | | 'name' => 'Directory', |
| | | 'url' => get_post_type_archive_link($type) |
| | | ]; |
| | | } elseif ((is_post_type_archive() || !Features::forContent($name)->has('show_directory')) && array_key_exists($name, JVB_CONTENT)) { |
| | | $crumbs[] = [ |
| | | 'name' => JVB_CONTENT[$name]['breadcrumb'] ?? JVB_CONTENT[$name]['plural'], |
| | | 'url' => get_post_type_archive_link($type) |
| | |
| | | $this->cache->clear(); |
| | | } |
| | | } |
| | | |
| | | public function addTaxToCrumbs(array $crumbs, string $taxonomy):array |
| | | { |
| | | $ID = get_the_ID(); |
| | | $taxonomy = jvbCheckBase($taxonomy); |
| | | $terms = get_the_terms($ID, $taxonomy); |
| | | if ($terms && !is_wp_error($terms)) { |
| | | $term = $terms[0]; |
| | | $ancestors = get_ancestors($term->term_id, $taxonomy, 'taxonomy'); |
| | | $ancestors = array_reverse($ancestors); |
| | | foreach ($ancestors as $ancestor) { |
| | | $aTerm = get_term($ancestor, $taxonomy); |
| | | if ($aTerm && !is_wp_error($aTerm)) { |
| | | $crumbs[] = [ |
| | | 'name' => $aTerm->name, |
| | | 'url' => get_term_link($ancestor, $taxonomy) |
| | | ]; |
| | | } |
| | | } |
| | | $crumbs[] = [ |
| | | 'name' => $term->name, |
| | | 'url' => get_term_link($term, $taxonomy) |
| | | ]; |
| | | } |
| | | return $crumbs; |
| | | } |
| | | } |