get($key); $crumbs = false; if ($crumbs) { return $crumbs; } $crumbs = []; $crumbs[] = [ 'name' => 'Home', 'icon' => jvbIcon('home'), 'url' => get_home_url(), ]; $obj = get_queried_object(); //taxonomies extra if (is_tax()) { switch ($obj->taxonomy) { case BASE.'type': $type = 'artist'; break; default: $type = jvbNoBase($obj->taxonomy); break; } $directory = jvbDirectories($type); $crumbs[] = [ 'name' => $directory['title'], 'url' => $directory['url'] ]; $crumbs = array_merge($crumbs, jvbGetBreadcrumbTermHierarchy($obj)); } if (is_singular()) { $directory = jvbDirectories(jvbNoBase($obj->post_type)); if (!empty($directory)) { $crumbs[] = [ 'name' => $directory['title'], 'url' => $directory['url'] ]; } if (jvbIsDirectory()) { $pos = jvbGetDirectoryInfo(); if (!empty($pos)) { $name = $pos['title']; if ($name == 'Map') { $crumbs[] = array( 'name' => 'Tattoo Shops', 'url' => jvbDirectories(BASE.'shop')['url'] ); } $crumbs[] = array( 'name' => $name, 'url' => $pos['url'] ); } } else { // // $crumbs[] = array( // 'name' => get_the_title(), // 'url' => false, // ); $crumbs = array_merge($crumbs, jvbGetBreadcrumbPostHierarchy($obj)); } } elseif (is_post_type_archive() && !is_post_type_archive(BASE.'dash')) { $name = jvbNoBase($obj->name); $crumbs[] = array( 'name' => JVB_CONTENT[$name]['breadcrumb']??JVB_CONTENT[$name]['plural'], 'url' => false, ); } $cache->set($key, $crumbs); return $crumbs; } /** * @return string */ function jvbBuildBreadcrumbs():string { if (is_front_page()) { return ''; } $crumbs = jvbGetCrumbs(); $out = ''; return $out; } /** * Builds a breadcrumb list of post parents, if available * @param WP_Post $post * @param array $crumbs * * @return array */ function jvbGetBreadcrumbPostHierarchy(WP_Post $post, array $crumbs = []):array { array_unshift($crumbs, [ 'name' => $post->post_title, 'url' => get_the_permalink($post->ID), 'id' => $post->ID, ]); if ($post->post_parent !== 0) { $parent = get_post($post->post_parent); if ($parent) { $crumbs = jvbGetBreadcrumbPostHierarchy($parent, $crumbs); } } return $crumbs; } /** * Builds a breadcrumb list of parent terms, if available * @param WP_Term $term * @param array $crumbs * * @return array */ function jvbGetBreadcrumbTermHierarchy(WP_Term $term, array $crumbs=[]):array { $url = get_term_link($term->term_id); array_unshift($crumbs, [ 'name' => $term->name, 'url' => $url, 'id' => $term->term_id, ]); if ($term->parent !== 0) { $parent = get_term($term->parent, $term->taxonomy); if ($parent) { $crumbs = jvbGetBreadcrumbTermHierarchy($parent, $crumbs); } } return $crumbs; } function jvbGetDirectoryInfo():array { if (is_post_type_archive(BASE.'directory')) { return [ 'title' => 'Directory of Directories', 'url' => get_post_type_archive_link(BASE.'directory'), 'slug' => 'directory', 'type' => 'directory' ]; } if (is_singular(BASE.'directory')) { $type = get_post_meta(get_the_ID(), BASE.'for_type_slug', true); return jvbDirectories()[$type]??[]; } $obj = get_queried_object(); $directories = jvbDirectories(); if (is_tax()) { $tax = jvbNoBase($obj->taxonomy); return (array_key_exists($tax, $directories)) ? $directories[$tax] : []; } $type = jvbNoBase($obj->post_type); return (array_key_exists($type, $directories)) ? $directories[$type] : []; }