| @@ -1,173 +1,141 @@ | ||
| 1 | 1 | <?php |
| 2 | -// phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- view template receives variables via extract(); prefixing is impractical. | |
| 2 | + if ( is_front_page() ) { | |
| 3 | + return; | |
| 4 | + } | |
| 3 | 5 | |
| 4 | -if ( ! defined( 'ABSPATH' ) ) { | |
| 5 | - exit; | |
| 6 | -} | |
| 7 | -if ( is_front_page() ) { | |
| 8 | - return; | |
| 9 | -} | |
| 10 | - $breadcrumbs_layout = isset( $breadcrumbs_layout ) ? $breadcrumbs_layout : 'layout-1'; | |
| 11 | - $home_text = betterdocs()->settings->get( 'breadcrumb_home_text', 'Home' ); | |
| 12 | - $home_url = betterdocs()->settings->get( 'breadcrumb_home_url' ); | |
| 13 | - $enable_breadcrumb_category = betterdocs()->settings->get( 'enable_breadcrumb_category' ); | |
| 14 | - $enable_breadcrumb_title = betterdocs()->settings->get( 'enable_breadcrumb_title' ); | |
| 15 | - $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page', true ); | |
| 16 | - $docs_page = betterdocs()->settings->get( 'docs_page' ); | |
| 17 | - $taxanomy = betterdocs()->query->get_taxonomy(); | |
| 18 | - $post_type = 'docs'; | |
| 19 | - $docs_page_title = __( 'Docs', 'betterdocs' ); | |
| 20 | - $li_classes = [ 'item-cat', 'item-custom-post-type-docs' ]; | |
| 21 | - $enable_breadcrumb_home_text = betterdocs()->settings->get('enable_breadcrumb_home_text', true); | |
| 6 | + $home_text = betterdocs()->settings->get( 'breadcrumb_home_text', 'Home' ); | |
| 7 | + $home_url = betterdocs()->settings->get( 'breadcrumb_home_url' ); | |
| 8 | + $enable_breadcrumb_category = betterdocs()->settings->get( 'enable_breadcrumb_category' ); | |
| 9 | + $enable_breadcrumb_title = betterdocs()->settings->get( 'enable_breadcrumb_title' ); | |
| 10 | + $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page', true ); | |
| 11 | + $docs_page = betterdocs()->settings->get( 'docs_page' ); | |
| 12 | + $taxanomy = betterdocs()->query->get_taxonomy(); | |
| 13 | + $post_type = 'docs'; | |
| 14 | + $docs_page_title = __( 'Docs', 'betterdocs' ); | |
| 15 | + $li_classes = ['item-cat', 'item-custom-post-type-docs']; | |
| 22 | 16 | |
| 23 | -if ( $builtin_doc_page || ( ! $builtin_doc_page && $docs_page <= 0 ) ) { | |
| 24 | - $post_type_object = get_post_type_object( $post_type ); | |
| 25 | - $li_classes = [ 'item-cat', 'item-custom-post-type-' . esc_attr( $post_type ) ]; | |
| 17 | + if ( $builtin_doc_page || ( ! $builtin_doc_page && $docs_page <= 0 ) ) { | |
| 18 | + $post_type_object = get_post_type_object( $post_type ); | |
| 19 | + $li_classes = ['item-cat', 'item-custom-post-type-' . esc_attr( $post_type )]; | |
| 26 | 20 | |
| 27 | - $docs_page_url = get_post_type_archive_link( $post_type ); | |
| 28 | - $docs_page_title = $post_type_object->labels->name; | |
| 29 | -} elseif ( $docs_page ) { | |
| 30 | - $li_classes = [ 'item-cat item-custom-docs-page' ]; | |
| 31 | - $docs_page_url = get_page_link( $docs_page ); | |
| 32 | - $docs_page_title = get_the_title( $docs_page ); | |
| 33 | -} | |
| 21 | + $docs_page_url = get_post_type_archive_link( $post_type ); | |
| 22 | + $docs_page_title = $post_type_object->labels->name; | |
| 23 | + } elseif ( $docs_page ) { | |
| 24 | + $li_classes = ['item-cat item-custom-docs-page']; | |
| 25 | + $docs_page_url = get_page_link( $docs_page ); | |
| 26 | + $docs_page_title = get_the_title( $docs_page ); | |
| 27 | + } | |
| 34 | 28 | |
| 35 | - $breadcrumbs = [ | |
| 36 | - [ | |
| 37 | - 'li_classes' => [ 'item-home' ], | |
| 38 | - 'url' => $home_url, | |
| 39 | - 'text' => stripslashes( $home_text ) | |
| 40 | - ], | |
| 41 | - [ | |
| 42 | - 'li_classes' => $li_classes, | |
| 43 | - 'url' => $docs_page_url, | |
| 44 | - 'text' => $docs_page_title | |
| 45 | - ] | |
| 46 | - ]; | |
| 29 | + $breadcrumbs = [ | |
| 30 | + [ | |
| 31 | + 'li_classes' => ['item-home'], | |
| 32 | + 'url' => $home_url, | |
| 33 | + 'text' => stripslashes( $home_text ) | |
| 34 | + ], | |
| 35 | + [ | |
| 36 | + 'li_classes' => $li_classes, | |
| 37 | + 'url' => $docs_page_url, | |
| 38 | + 'text' => $docs_page_title | |
| 39 | + ] | |
| 40 | + ]; | |
| 47 | 41 | |
| 48 | - if( ! $enable_breadcrumb_home_text ) { | |
| 49 | - unset($breadcrumbs[0]); | |
| 50 | - } | |
| 42 | + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_archives', $breadcrumbs ); | |
| 43 | + if ( $taxanomy == 'doc_category' || is_tax( 'doc_tag' ) ) { | |
| 44 | + if ( $enable_breadcrumb_category ) { | |
| 45 | + $query_obj = get_queried_object(); | |
| 46 | + $term_id = $query_obj->term_id; | |
| 51 | 47 | |
| 52 | - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_archives', $breadcrumbs ); | |
| 48 | + $term_parents = betterdocs()->query->get_term_parents( $term_id ); | |
| 49 | + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $term_parents ) ); | |
| 50 | + } | |
| 51 | + } elseif ( is_single() ) { | |
| 52 | + global $wp_query, $post; | |
| 53 | 53 | |
| 54 | - // Detect the current archive taxonomy via the queried object (reliable in Elementor theme builder context) | |
| 55 | - $_queried_obj = get_queried_object(); | |
| 56 | - $_is_doc_tag = $_queried_obj instanceof \WP_Term && $_queried_obj->taxonomy === 'doc_tag'; | |
| 54 | + if ( $enable_breadcrumb_category ) { | |
| 55 | + $cat_terms = []; | |
| 56 | + if ( isset( $wp_query->query_vars['doc_category'] ) ) { | |
| 57 | + $term = get_term_by( 'slug', $wp_query->query_vars['doc_category'], 'doc_category' ); | |
| 58 | + if ( ! empty( $term ) ) { | |
| 59 | + $cat_terms[] = $term; | |
| 60 | + } | |
| 61 | + } | |
| 57 | 62 | |
| 58 | - if ( $taxanomy == 'doc_category' ) { | |
| 59 | - if ( $enable_breadcrumb_category ) { | |
| 60 | - $query_obj = get_queried_object(); | |
| 61 | - $term_id = $query_obj->term_id; | |
| 63 | + if ( empty( $cat_terms ) ) { | |
| 64 | + $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' ); | |
| 65 | + } | |
| 62 | 66 | |
| 63 | - $term_parents = betterdocs()->query->get_term_parents( $term_id ); | |
| 64 | - if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) { | |
| 65 | - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $term_parents ) ); | |
| 66 | - } | |
| 67 | - } | |
| 68 | - } elseif ( $_is_doc_tag ) { | |
| 69 | - // Always append the current tag name: Home > Docs > Tag Title | |
| 70 | - $tag_crumb = [ | |
| 71 | - [ | |
| 72 | - 'li_classes' => [ 'item-current', 'item-tag-' . esc_attr( $_queried_obj->term_id ), 'current' ], | |
| 73 | - 'url' => '', | |
| 74 | - 'text' => $_queried_obj->name, | |
| 75 | - ], | |
| 76 | - ]; | |
| 77 | - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $tag_crumb ) ); | |
| 78 | - } elseif ( is_single() ) { | |
| 79 | - global $wp_query, $post; | |
| 67 | + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs ); | |
| 80 | 68 | |
| 81 | - if ( $enable_breadcrumb_category ) { | |
| 82 | - $cat_terms = []; | |
| 83 | - if ( isset( $wp_query->query_vars['doc_category'] ) ) { | |
| 84 | - $term = get_term_by( 'slug', $wp_query->query_vars['doc_category'], 'doc_category' ); | |
| 85 | - if ( ! empty( $term ) ) { | |
| 86 | - $cat_terms[] = $term; | |
| 87 | - } | |
| 88 | - } | |
| 69 | + if ( $cat_terms ) { | |
| 70 | + $term_parents = betterdocs()->query->get_term_parents( $cat_terms[0]->term_id ); | |
| 71 | + $breadcrumbs = array_merge( $breadcrumbs, $term_parents ); | |
| 72 | + } | |
| 73 | + } | |
| 89 | 74 | |
| 90 | - if ( empty( $cat_terms ) ) { | |
| 91 | - $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' ); | |
| 92 | - } | |
| 75 | + // Check if the post is in a category | |
| 76 | + if ( $enable_breadcrumb_title ) { | |
| 77 | + $breadcrumbs[] = [ | |
| 78 | + 'li_classes' => ['item-current', 'item-' . $post->ID, 'current'], | |
| 79 | + 'url' => '', | |
| 80 | + 'text' => betterdocs()->template_helper->kses( get_the_title() ) | |
| 81 | + ]; | |
| 82 | + } | |
| 83 | + } | |
| 93 | 84 | |
| 94 | - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs ); | |
| 85 | + if ( empty( $breadcrumbs ) ) { | |
| 86 | + return; | |
| 87 | + } | |
| 95 | 88 | |
| 96 | - if ( $cat_terms ) { | |
| 97 | - $term_parents = betterdocs()->query->get_term_parents( $cat_terms[0]->term_id ); | |
| 98 | - if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) { | |
| 99 | - $breadcrumbs = array_merge( $breadcrumbs, $term_parents ); | |
| 100 | - } | |
| 101 | - } | |
| 102 | - } | |
| 89 | + $_wrapper_attr_array = [ | |
| 90 | + 'class' => ['betterdocs-breadcrumb'], | |
| 91 | + 'id' => ['betterdocs-breadcrumb'] | |
| 92 | + ]; | |
| 103 | 93 | |
| 104 | - // Check if the post is in a category | |
| 105 | - if ( $enable_breadcrumb_title ) { | |
| 106 | - $breadcrumbs[] = [ | |
| 107 | - 'li_classes' => [ 'item-current', 'item-' . ( $post->ID != null ? $post->ID : '' ), 'current' ], | |
| 108 | - 'url' => '', | |
| 109 | - 'text' => betterdocs()->template_helper->kses( get_the_title() ) | |
| 110 | - ]; | |
| 111 | - } | |
| 112 | - } | |
| 94 | + if ( ! empty( $wrapper_attr_array ) && isset( $widget_type ) && $widget_type === 'betterdocs-breadcrumb' ) { | |
| 95 | + $wrapper_attr_array['class'][] = 'betterdocs-breadcrumb'; | |
| 96 | + $wrapper_attr_array['id'][] = 'betterdocs-breadcrumb'; | |
| 97 | + } else { | |
| 98 | + $wrapper_attr_array = $_wrapper_attr_array; | |
| 99 | + } | |
| 113 | 100 | |
| 114 | - if ( empty( $breadcrumbs ) ) { | |
| 115 | - return; | |
| 116 | - } | |
| 101 | + if ( $widget instanceof \WPDeveloper\BetterDocs\Editors\BlockEditor\Block ) { | |
| 102 | + $wrapper_attr_array['class'][] = $blockId; | |
| 103 | + } | |
| 117 | 104 | |
| 118 | - $_wrapper_attr_array = [ | |
| 119 | - 'class' => [ 'betterdocs-breadcrumb' ], | |
| 120 | - 'id' => [ 'betterdocs-breadcrumb' ] | |
| 121 | - ]; | |
| 105 | + $wrapper_attr = betterdocs()->template_helper->get_html_attributes( $wrapper_attr_array ); | |
| 106 | +?> | |
| 122 | 107 | |
| 123 | - if ( isset( $breadcrumbs_layout ) && ! empty( $breadcrumbs_layout ) ) { | |
| 124 | - $br_wrapper_attr_array['class'][] = 'betterdocs-breadcrumb ' . $breadcrumbs_layout; | |
| 125 | - $br_wrapper_attr_array['id'][] = 'betterdocs-breadcrumb'; | |
| 126 | - } else { | |
| 127 | - $br_wrapper_attr_array = $_wrapper_attr_array; | |
| 128 | - } | |
| 129 | - | |
| 130 | - | |
| 131 | - if ( isset( $widget ) && $widget instanceof \WPDeveloper\BetterDocs\Editors\BlockEditor\Block ) { | |
| 132 | - $br_wrapper_attr_array['class'][] = $blockId; | |
| 133 | - } | |
| 134 | - | |
| 135 | - $wrapper_attr = betterdocs()->template_helper->get_html_attributes( $br_wrapper_attr_array ); | |
| 136 | - ?> | |
| 137 | - | |
| 138 | 108 | <nav |
| 139 | - <?php echo $wrapper_attr; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> | |
| 140 | - <ul class="betterdocs-breadcrumb-list"> | |
| 141 | - <?php | |
| 142 | - foreach ( $breadcrumbs as $breadcrumb ) : | |
| 143 | - $li_classes = [ 'betterdocs-breadcrumb-item' ]; | |
| 144 | - $li_classes = ! empty( $breadcrumb['li_classes'] ) ? array_merge( $li_classes, $breadcrumb['li_classes'] ) : $li_classes; | |
| 145 | - ?> | |
| 146 | - <li class="<?php echo implode( ' ', $li_classes ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>"> | |
| 147 | - <?php | |
| 148 | - if ( empty( $breadcrumb['url'] ) ) { | |
| 149 | - echo wp_kses_post( '<span>' . $breadcrumb['text'] . '</span>' ); | |
| 150 | - } else { | |
| 151 | - echo wp_kses_post( | |
| 152 | - wp_sprintf( | |
| 153 | - "<a href='%s' class='bread-link' title='%s'>%s</a>", | |
| 154 | - esc_attr( esc_url( $breadcrumb['url'] ) ), | |
| 155 | - esc_attr( stripslashes( $breadcrumb['text'] ) ), | |
| 156 | - $breadcrumb['text'] | |
| 157 | - ) | |
| 158 | - ); | |
| 159 | - } | |
| 160 | - ?> | |
| 161 | - </li> | |
| 162 | - <?php | |
| 163 | - if ( next( $breadcrumbs ) ) : | |
| 164 | - if ( $breadcrumbs_layout == 'layout-2' || $breadcrumbs_layout == 'layout-3' ) { | |
| 165 | - $view_object->get( 'template-parts/breadcrumb-delimiter-2' ); | |
| 166 | - } else { | |
| 167 | - $view_object->get( 'template-parts/breadcrumb-delimiter-1' ); | |
| 168 | - } | |
| 169 | - endif; | |
| 170 | - ?> | |
| 171 | - <?php endforeach; ?> | |
| 172 | - </ul> | |
| 109 | + <?php echo $wrapper_attr; ?>> | |
| 110 | + <ul class="betterdocs-breadcrumb-list"> | |
| 111 | + <?php | |
| 112 | + foreach ( $breadcrumbs as $breadcrumb ): | |
| 113 | + $li_classes = ['betterdocs-breadcrumb-item']; | |
| 114 | + $li_classes = ! empty( $breadcrumb['li_classes'] ) ? array_merge( $li_classes, $breadcrumb['li_classes'] ) : $li_classes; | |
| 115 | + ?> | |
| 116 | + <li class="<?php echo implode( ' ', $li_classes );?>"> | |
| 117 | + <?php | |
| 118 | + if ( empty( $breadcrumb['url'] ) ) { | |
| 119 | + echo wp_kses_post( '<span>' . $breadcrumb['text'] . '</span>' ); | |
| 120 | + } else { | |
| 121 | + echo wp_kses_post( wp_sprintf( | |
| 122 | + "<a href='%s' class='bread-link' title='%s'>%s</a>", | |
| 123 | + esc_attr( esc_url( $breadcrumb['url'] ) ), | |
| 124 | + esc_attr( stripslashes( $breadcrumb['text'] ) ), | |
| 125 | + $breadcrumb['text'] | |
| 126 | + ) ); | |
| 127 | + } | |
| 128 | + ?> | |
| 129 | + </li> | |
| 130 | + <?php if ( next( $breadcrumbs ) ): ?> | |
| 131 | + <li class="betterdocs-breadcrumb-item breadcrumb-delimiter"> | |
| 132 | + <span class="icon-container"> | |
| 133 | + <svg class="breadcrumb-delimiter-icon svg-inline--fa fa-angle-right fa-w-8" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"> | |
| 134 | + <path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path> | |
| 135 | + </svg> | |
| 136 | + </span> | |
| 137 | + </li> | |
| 138 | + <?php endif;?> | |
| 139 | +<?php endforeach;?> | |
| 140 | + </ul> | |
| 173 | 141 | </nav> |