Advertisement
pathankp

This Resolves aria-label issue with Blocksy Theme

Apr 15th, 2023
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 18.08 KB | Fixit | 0 0
  1. // To fix issue page speed "Links do not have a discernible name"
  2. // edit the file "inc/components/breadcrumbs.php" and replace with the following code:
  3.  
  4. <?php
  5.  
  6. class Blocksy_Breadcrumbs_Builder {
  7.     public function __construct() {
  8.         $this->settings['labels'] = [
  9.             'homepage-title' => get_theme_mod(
  10.                 'breadcrumb_home_text',
  11.                 __('Home', 'blocksy')
  12.             ),
  13.             'blogpage-title' => __('Blog', 'blocksy'),
  14.             '404-title' => __('404 Not found', 'blocksy'),
  15.         ];
  16.     }
  17.  
  18.     /**
  19.      * Determine if the page has parents and in case it has, adds all page parents hierarchy
  20.      *
  21.      * @param $id , page id
  22.      *
  23.      * @return array
  24.      */
  25.     private function get_page_hierarchy($id, $has_single_check = true) {
  26.         $page = get_post($id);
  27.  
  28.         if (empty($page) || is_wp_error($page)) {
  29.             return [];
  30.         }
  31.  
  32.         $return = [];
  33.         $page_obj = [];
  34.  
  35.         $page_obj['type'] = 'post';
  36.         $page_obj['post_type'] = $page->post_type;
  37.         $page_obj['name'] = $page->post_title;
  38.         $page_obj['id'] = $id;
  39.         $page_obj['url'] = get_permalink($id);
  40.  
  41.         $return[] = $page_obj;
  42.  
  43.         if ($page->post_parent > 0) {
  44.             $return = array_merge(
  45.                 $return,
  46.                 $this->get_page_hierarchy($page->post_parent)
  47.             );
  48.         }
  49.  
  50.         return $return;
  51.     }
  52.  
  53.     /**
  54.      * Determine if the term has parents and in case it has, adds all term parents hierarchy
  55.      *
  56.      * @param $id , term id
  57.      * @param $taxonomy , term taxonomy name
  58.      *
  59.      * @return array
  60.      */
  61.     private function get_term_hierarchy($id, $taxonomy) {
  62.         $term = get_term($id, $taxonomy);
  63.  
  64.         if (empty($term) || is_wp_error($term)) {
  65.             return [];
  66.         }
  67.  
  68.         $return = [];
  69.         $term_obj = [];
  70.  
  71.         $term_obj['type'] = 'taxonomy';
  72.         $term_obj['name'] = $term->name;
  73.         $term_obj['id'] = $id;
  74.         $term_obj['url'] = get_term_link($id, $taxonomy);
  75.         $term_obj['taxonomy'] = $taxonomy;
  76.  
  77.         $return[] = $term_obj;
  78.  
  79.         if ($term->parent > 0) {
  80.             $return = array_merge(
  81.                 $return,
  82.                 $this->get_term_hierarchy($term->parent, $taxonomy)
  83.             );
  84.         }
  85.  
  86.         return $return;
  87.     }
  88.  
  89.     private function get_custom_post_type_archive() {
  90.         $return = [];
  91.  
  92.         $post_type = get_post_type();
  93.         $post_type_object = get_post_type_object( $post_type );
  94.  
  95.         if (
  96.             $post_type_object
  97.             &&
  98.             $post_type !== 'blog'
  99.             &&
  100.             $post_type !== 'product'
  101.             &&
  102.             $post_type_object->has_archive
  103.         ) {
  104.             // Add support for a non-standard label of 'archive_title' (special use case).
  105.             $label = ! empty(
  106.                 $post_type_object->labels->archive_title
  107.             ) ? $post_type_object->labels->archive_title : $post_type_object->labels->name;
  108.  
  109.             // Core filter hook.
  110.             $label = apply_filters(
  111.                 'post_type_archive_title',
  112.                 $label,
  113.                 $post_type_object->name
  114.             );
  115.  
  116.             $return[] = [
  117.                 'name' => $label,
  118.                 'url' => get_post_type_archive_link($post_type)
  119.             ];
  120.         }
  121.  
  122.         return $return;
  123.     }
  124.  
  125.     /**
  126.      * Determine the current frontend page location, in creates the breadcrumbs array
  127.      * @return array
  128.      */
  129.     private function build_breadcrumbs() {
  130.         if (is_admin()) {
  131.             return [];
  132.         }
  133.  
  134.         if (did_action('wp') === 0) {
  135.             return [];
  136.         }
  137.  
  138.         $home_icon = '';
  139.  
  140.         if (get_theme_mod('breadcrumb_home_item', 'text') === 'icon') {
  141.             $home_icon = '<svg class="ct-home-icon" width="15" viewBox="0 0 24 20" aria-label="Home"><path d="M12,0L0.4,10.5h3.2V20h6.3v-6.3h4.2V20h6.3v-9.5h3.2L12,0z"/></svg>';
  142.         }
  143.  
  144.         $return = [
  145.             0 => [
  146.                 'name' => $this->settings['labels']['homepage-title'],
  147.                 'url'  => esc_url( home_url('/') ),
  148.                 'type' => 'front_page',
  149.                 'icon' => $home_icon
  150.             ]
  151.         ];
  152.  
  153.         $has_single = get_theme_mod('breadcrumb_page_title', 'yes') === 'yes';
  154.         $has_taxonomy = get_theme_mod('breadcrumb_taxonomy_title', 'yes') === 'yes';
  155.  
  156.         $custom_page = [];
  157.  
  158.         if (is_array($custom_page) && !empty($custom_page)) {
  159.             $return[] = $custom_page;
  160.             return $return;
  161.         }
  162.  
  163.         if (is_404()) {
  164.             $page = [];
  165.  
  166.             $page['type'] = '404';
  167.             $page['name'] = $this->settings['labels']['404-title'];
  168.             $page['url'] = blocksy_current_url();
  169.  
  170.             $return[] = $page;
  171.         } elseif (is_search()) {
  172.             $search = [];
  173.  
  174.             $search['type'] = 'search';
  175.             $search['name'] = __('Searching for:', 'blocksy') . ' ' . get_search_query();
  176.             $s = '?s=' . get_search_query();
  177.             $search['url'] = home_url('/') . $s;
  178.  
  179.             $return[] = $search;
  180.         } elseif (is_front_page()) {
  181.             $return = array_merge(
  182.                 $return,
  183.                 $this->get_custom_post_type_archive()
  184.             );
  185.         } elseif ($blocksy_is_page = blocksy_is_page()) {
  186.             $return = array_merge(
  187.                 $return,
  188.                 array_reverse($this->get_page_hierarchy($blocksy_is_page))
  189.             );
  190.  
  191.             $has_single = get_theme_mod(
  192.                 'breadcrumb_page_title',
  193.                 'yes'
  194.             ) === 'yes';
  195.  
  196.             if (! $has_single) {
  197.                 array_pop($return);
  198.             }
  199.         } elseif (is_single()) {
  200.             global $post;
  201.  
  202.             $taxonomies = get_object_taxonomies($post->post_type, 'objects');
  203.  
  204.             $primary_taxonomy_hash = [
  205.                 'post' => 'category',
  206.                 'product' => 'product_cat'
  207.             ];
  208.  
  209.             $slugs = [];
  210.  
  211.             if (isset($primary_taxonomy_hash[$post->post_type])) {
  212.                 foreach ($taxonomies as $key => $tax) {
  213.                     if ($tax->name === $primary_taxonomy_hash[$post->post_type]) {
  214.                         $slugs[] = $tax->name;
  215.                         break;
  216.                     }
  217.                 }
  218.             }
  219.  
  220.             $return = array_merge(
  221.                 $return,
  222.                 $this->get_custom_post_type_archive()
  223.             );
  224.  
  225.             if (! empty($taxonomies)) {
  226.                 if (empty($slugs)) {
  227.                     foreach ($taxonomies as $key => $tax) {
  228.                         if (
  229.                             $tax->show_ui === true
  230.                             &&
  231.                             $tax->public === true
  232.                             &&
  233.                             $tax->hierarchical !== false
  234.                         ) {
  235.                             array_push($slugs, $tax->name);
  236.                         }
  237.                     }
  238.                 }
  239.  
  240.                 $slugs = apply_filters(
  241.                     'blocksy:breadcrumbs:single:taxonomies:slugs',
  242.                     $slugs
  243.                 );
  244.  
  245.                 $terms = wp_get_post_terms($post->ID, $slugs);
  246.  
  247.                 if (! empty($terms)) {
  248.                     $lowest_term = $this->get_lowest_taxonomy_terms(
  249.                         $post, $terms,
  250.                         $slugs[0]
  251.                     );
  252.  
  253.                     $term = $lowest_term[0];
  254.  
  255.                     $return = array_merge(
  256.                         $return,
  257.                         array_reverse(
  258.                             $this->get_term_hierarchy(
  259.                                 $term->term_id,
  260.                                 $term->taxonomy
  261.                             )
  262.                         )
  263.                     );
  264.                 }
  265.             }
  266.  
  267.             $return = array_merge(
  268.                 $return,
  269.                 array_reverse($this->get_page_hierarchy($post->ID))
  270.             );
  271.  
  272.             $has_single = get_theme_mod(
  273.                 'breadcrumb_page_title',
  274.                 'yes'
  275.             ) === 'yes';
  276.  
  277.             if (! $has_single) {
  278.                 array_pop($return);
  279.             }
  280.         } elseif (is_category()) {
  281.             $term_id = get_query_var('cat');
  282.  
  283.             $tax_result = array_reverse(
  284.                 $this->get_term_hierarchy($term_id, 'category')
  285.             );
  286.  
  287.             if (! $has_taxonomy) {
  288.                 array_pop($tax_result);
  289.             }
  290.  
  291.             $return = array_merge(
  292.                 $return,
  293.                 $tax_result
  294.             );
  295.         } elseif (is_tag()) {
  296.             $term_id = get_query_var('tag');
  297.             $term = get_term_by('slug', $term_id, 'post_tag');
  298.  
  299.             if (empty($term) || is_wp_error($term)) {
  300.                 return [];
  301.             }
  302.  
  303.             if ($has_taxonomy) {
  304.                 $tag = [];
  305.  
  306.                 $tag['type'] = 'taxonomy';
  307.                 $tag['name'] = $term->name;
  308.                 $tag['url'] = get_term_link($term_id, 'post_tag');
  309.                 $tag['taxonomy'] = 'post_tag';
  310.                 $return[] = $tag;
  311.             }
  312.         } elseif (is_tax()) {
  313.             $term_id = get_queried_object()->term_id;
  314.             $taxonomy = get_queried_object()->taxonomy;
  315.  
  316.             $tax_result = array_reverse(
  317.                 $this->get_term_hierarchy($term_id, $taxonomy)
  318.             );
  319.  
  320.             if (! $has_taxonomy) {
  321.                 array_pop($tax_result);
  322.             }
  323.  
  324.             $return = array_merge(
  325.                 $return,
  326.                 $this->get_custom_post_type_archive(),
  327.                 $tax_result
  328.             );
  329.         } elseif (is_author()) {
  330.             $author = [];
  331.  
  332.             $author_data = get_userdata(get_the_author_meta('ID'));
  333.  
  334.             $author['name'] = $author_data->display_name;
  335.             $author['id'] = get_the_author_meta('ID');
  336.             $author['url'] = get_author_posts_url(
  337.                 $author['id'],
  338.                 $author_data->user_nicename
  339.             );
  340.             $author['type'] = 'author';
  341.  
  342.             $return[] = $author;
  343.         } elseif (is_date()) {
  344.             $date = [];
  345.  
  346.             if (get_option('permalink_structure')) {
  347.                 $day = get_query_var('day');
  348.                 $month = get_query_var('monthnum');
  349.                 $year = get_query_var('year');
  350.             } else {
  351.                 $m = get_query_var('m');
  352.                 $year = substr($m, 0, 4);
  353.                 $month = substr($m, 4, 2);
  354.                 $day = substr($m, 6, 2);
  355.             }
  356.  
  357.             if (is_day()) {
  358.                 $date['name'] = mysql2date(
  359.                     'd F Y',
  360.                     $day . '-' . $month . '-' . $year
  361.                 );
  362.                 $date['url'] = get_day_link($year, $month, $day);
  363.                 $date['date_type'] = 'daily';
  364.                 $date['day'] = $day;
  365.                 $date['month'] = $month;
  366.                 $date['year'] = $year;
  367.             } elseif (is_month()) {
  368.                 $date['name'] = mysql2date(
  369.                     'F Y',
  370.                     '01.' . $month . '.' . $year
  371.                 );
  372.                 $date['url'] = get_month_link($year, $month);
  373.                 $date['date_type'] = 'monthly';
  374.                 $date['month'] = $month;
  375.                 $date['year'] = $year;
  376.             } else {
  377.                 $date['name'] = mysql2date(
  378.                     'Y',
  379.                     '01.01.' . $year
  380.                 );
  381.                 $date['url'] = get_year_link($year);
  382.                 $date['date_type'] = 'yearly';
  383.                 $date['year'] = $year;
  384.             }
  385.  
  386.             $return[] = $date;
  387.         } elseif (is_archive()) {
  388.             $post_type = get_query_var('post_type');
  389.  
  390.             if ($post_type) {
  391.                 $post_type_obj = get_post_type_object($post_type);
  392.                 $archive = [];
  393.                 $archive['name'] = $post_type_obj->labels->name;
  394.                 $archive['url'] = get_post_type_archive_link($post_type);
  395.                 $return[] = $archive;
  396.             }
  397.         }
  398.  
  399.         foreach ($return as $key => $item) {
  400.             if (empty($item['name'])) {
  401.                 $return[$key]['name'] = __('No title', 'blocksy');
  402.             }
  403.         }
  404.  
  405.         if (function_exists('is_woocommerce') && is_woocommerce()) {
  406.             $permalinks = wc_get_permalink_structure();
  407.             $shop_page_id = wc_get_page_id('shop');
  408.             $shop_page = get_post($shop_page_id);
  409.  
  410.             if (
  411.                 $shop_page_id
  412.                 &&
  413.                 $shop_page
  414.                 &&
  415.                 isset($permalinks['product_base'])
  416.                 &&
  417.                 strstr($permalinks['product_base'], '/' . $shop_page->post_name)
  418.                 &&
  419.                 intval(get_option('page_on_front')) !== $shop_page_id
  420.                 &&
  421.                 intval($shop_page_id) !== intval(blocksy_is_page())
  422.             ) {
  423.                 array_splice($return, 1, 0, [
  424.                     [
  425.                         'url' => get_permalink($shop_page),
  426.                         'name' => get_the_title($shop_page)
  427.                     ]
  428.                 ]);
  429.             }
  430.         }
  431.  
  432.         return apply_filters('blocksy:breadcrumbs:items-array', $return);
  433.     }
  434.  
  435.     /**
  436.      * Returns the lowest hierarchical term
  437.      * @return array
  438.      */
  439.     private function get_lowest_taxonomy_terms($post, $terms, $taxonomy) {
  440.         $post_id = $post->ID;
  441.  
  442.         $primary_term = null;
  443.  
  444.         if (class_exists('WPSEO_Primary_Term')) {
  445.             $primary_term = new WPSEO_Primary_Term($taxonomy, $post_id);
  446.             $primary_term = get_term($primary_term->get_primary_term());
  447.         }
  448.  
  449.         // B. The SEO Framework
  450.         if (function_exists('the_seo_framework')) {
  451.             $primary_term = the_seo_framework()->get_primary_term(
  452.                 $post_id,
  453.                 $taxonomy
  454.             );
  455.         }
  456.  
  457.         // C. RankMath
  458.         if (class_exists('RankMath')) {
  459.             $primary_cat_id = get_post_meta($post_id, "rank_math_primary_{$taxonomy}", true);
  460.             $primary_term = (!empty($primary_cat_id)) ? get_term($primary_cat_id, $taxonomy) : '';
  461.         }
  462.  
  463.         // D. SEOPress
  464.         if (function_exists('seopress_init') && $taxonomy == 'category') {
  465.             $primary_cat_id = get_post_meta($post_id, '_seopress_robots_primary_cat', true);
  466.             $primary_term = (!empty($primary_cat_id)) ? get_term($primary_cat_id, 'category') : '';
  467.         }
  468.  
  469.         if ($primary_term && ! is_wp_error($primary_term)) {
  470.             return [$primary_term];
  471.         }
  472.  
  473.         // if terms is not array or its empty don't proceed
  474.         if (! is_array($terms) || empty($terms)) {
  475.             return false;
  476.         }
  477.  
  478.         return $this->filter_terms($terms);
  479.     }
  480.  
  481.     private function filter_terms($terms) {
  482.         $return_terms = array();
  483.         $term_ids = array();
  484.  
  485.         foreach ($terms as $t) {
  486.             $term_ids[] = $t->term_id;
  487.         }
  488.  
  489.         foreach ($terms as $t) {
  490.             if ($t->parent == false || !in_array($t->parent,$term_ids)) {
  491.                 // remove this term
  492.             } else {
  493.                 $return_terms[] = $t;
  494.             }
  495.         }
  496.  
  497.         if (count($return_terms)) {
  498.             return $this->filter_terms($return_terms);
  499.         } else {
  500.             return $terms;
  501.         }
  502.     }
  503.  
  504.     /**
  505.      * Returns the breadcrumbs array
  506.      * @return string
  507.      */
  508.     public function get_breadcrumbs() {
  509.         $result = $this->build_breadcrumbs();
  510.  
  511.         if (class_exists('WC_Breadcrumb')) {
  512.             $woo_compatible_breadcrumbs = new WC_Breadcrumb();
  513.  
  514.             foreach ($result as $item) {
  515.                 $woo_compatible_breadcrumbs->add_crumb($item['name'], $item['url']);
  516.             }
  517.  
  518.             do_action(
  519.                 'woocommerce_breadcrumb',
  520.                 $woo_compatible_breadcrumbs,
  521.                 apply_filters(
  522.                     'woocommerce_breadcrumb_defaults',
  523.                     [
  524.                         'delimiter'   => '&nbsp;&#47;&nbsp;',
  525.                         'wrap_before' => '<nav class="woocommerce-breadcrumb">',
  526.                         'wrap_after'  => '</nav>',
  527.                         'before'      => '',
  528.                         'after'       => '',
  529.                         'home'        => _x( 'Home', 'breadcrumb', 'woocommerce' ),
  530.                     ]
  531.                 )
  532.             );
  533.         }
  534.  
  535.         return $result;
  536.     }
  537.  
  538.     public function render($args = []) {
  539.         $args = wp_parse_args($args, [
  540.             'class' => ''
  541.         ]);
  542.  
  543.         $source = get_theme_mod('breadcrumbs_source', 'default');
  544.  
  545.         if (
  546.             function_exists('rank_math_the_breadcrumbs')
  547.             &&
  548.             $source === 'rankmath'
  549.         ) {
  550.             ob_start();
  551.             rank_math_the_breadcrumbs();
  552.             $content = ob_get_clean();
  553.  
  554.             if (! empty($content)) {
  555.                 return '<div class="ct-breadcrumbs">' . $content . '</div>';
  556.             }
  557.         }
  558.  
  559.         if (
  560.             function_exists('yoast_breadcrumb')
  561.             &&
  562.             $source === 'yoast'
  563.         ) {
  564.             ob_start();
  565.             yoast_breadcrumb('<div class="ct-breadcrumbs">', '</div>');
  566.             $content = ob_get_clean();
  567.  
  568.             if (! empty($content)) {
  569.                 return $content;
  570.             }
  571.         }
  572.  
  573.         if (
  574.             function_exists('seopress_display_breadcrumbs')
  575.             &&
  576.             $source === 'seopress'
  577.         ) {
  578.             ob_start();
  579.             echo '<div class="ct-breadcrumbs">';
  580.             seopress_display_breadcrumbs();
  581.             echo '</div>';
  582.             return ob_get_clean();
  583.         }
  584.  
  585.         if (
  586.             function_exists('bcn_display')
  587.             &&
  588.             $source === 'bcnxt'
  589.         ) {
  590.             ob_start();
  591.             echo '<div class="ct-breadcrumbs">';
  592.             bcn_display();
  593.             echo '</div>';
  594.             return ob_get_clean();
  595.         }
  596.  
  597.         $items = $this->get_breadcrumbs();
  598.  
  599.         $separators = [
  600.             'type-1' => '<svg class="separator" width="8" height="8" viewBox="0 0 8 8">
  601.                 <path d="M2,6.9L4.8,4L2,1.1L2.6,0l4,4l-4,4L2,6.9z"/>
  602.             </svg>',
  603.  
  604.             'type-2' => '<svg class="separator" width="8" height="8" viewBox="0 0 8 8">
  605.                 <polygon points="2.5,0 6.9,4 2.5,8 "/>
  606.             </svg>',
  607.  
  608.             'type-3' => '<span class="separator">/</span>'
  609.         ];
  610.  
  611.         $separator = $separators[
  612.             get_theme_mod('breadcrumb_separator', 'type-1')
  613.         ];
  614.  
  615.         if (count($items) < 1) {
  616.             return '';
  617.         }
  618.  
  619.         $class = 'ct-breadcrumbs';
  620.  
  621.         if (! empty($args['class'])) {
  622.             $class .= ' ' . $args['class'];
  623.         }
  624.  
  625.         ob_start();
  626.  
  627.         ?>
  628.  
  629.             <nav class="<?php echo $class ?>" <?php echo blocksy_schema_org_definitions('breadcrumb_list') ?>><?php
  630.                 for ($i = 0; $i < count($items); $i++) {
  631.                     if ($i === (count($items) - 1)) {
  632.                         $should_be_link = false;
  633.  
  634.                         if (is_single() || blocksy_is_page()) {
  635.                             $has_single = get_theme_mod(
  636.                                 'breadcrumb_page_title',
  637.                                 'yes'
  638.                             ) === 'yes';
  639.  
  640.                             if (! $has_single) {
  641.                                 $should_be_link = true;
  642.                             }
  643.                         }
  644.  
  645.                         if (is_category() || is_tag() || is_tax()) {
  646.                             $has_taxonomy = get_theme_mod(
  647.                                 'breadcrumb_taxonomy_title',
  648.                                 'yes'
  649.                             ) === 'yes';
  650.  
  651.                             if (! $has_taxonomy) {
  652.                                 $should_be_link = true;
  653.                             }
  654.                         }
  655.  
  656.                         echo '<span class="last-item" ' . blocksy_schema_org_definitions('breadcrumb_item') . '>';
  657.  
  658.                         if (blocksy_has_schema_org_markup()) {
  659.                             echo '<meta itemprop="position" content="' . ($i + 1) . '">';
  660.                         }
  661.  
  662.                         if (isset($items[$i]['url']) && $should_be_link) {
  663.                             echo '<a href="' . esc_attr( $items[ $i ]['url'] ) . '" ' . blocksy_schema_org_definitions('item'). '>';
  664.  
  665.                             if (isset($items[$i]['icon'])) {
  666.                                 echo $items[$i]['icon'];
  667.                             }
  668.  
  669.                             echo '<span ' . blocksy_schema_org_definitions('name') . '>';
  670.                             echo $items[ $i ]['name'];
  671.                             echo '</span>';
  672.  
  673.                             echo '</a>';
  674.                         } else {
  675.                             if (isset($items[$i]['icon'])) {
  676.                                 echo $items[$i]['icon'];
  677.                             }
  678.  
  679.                             echo '<span ' . blocksy_schema_org_definitions('name') . '>';
  680.                             echo $items[ $i ]['name'];
  681.                             echo '</span>';
  682.                         }
  683.  
  684.                         if (
  685.                             blocksy_has_schema_org_markup()
  686.                             &&
  687.                             isset($items[$i]['url'])
  688.                         ) {
  689.                             echo '<meta itemprop="url" content="' . esc_attr( $items[ $i ]['url'] ) . '"/>';
  690.                         }
  691.  
  692.                         echo '</span>';
  693.                     } else if ($i === 0) {
  694.                         echo '<span class="first-item" ' .  blocksy_schema_org_definitions('breadcrumb_item') . '>';
  695.  
  696.                         if (blocksy_has_schema_org_markup()) {
  697.                             echo '<meta itemprop="position" content="' . ($i + 1) . '">';
  698.                         }
  699.  
  700.                         if (isset($items[$i]['url'])) {
  701.                             echo '<a href="' . esc_attr( $items[ $i ]['url'] ) . '" ' . blocksy_schema_org_definitions('item') . '>';
  702.  
  703.                             if (isset($items[$i]['icon'])) {
  704.                                 echo $items[$i]['icon'];
  705.                             }
  706.  
  707.                             echo '<span ' . blocksy_schema_org_definitions('name') . '>';
  708.                             echo $items[ $i ]['name'];
  709.                             echo '</span>';
  710.  
  711.                             echo '</a>';
  712.                         } else {
  713.                             echo $items[$i]['name'];
  714.                         }
  715.  
  716.                         if (
  717.                             blocksy_has_schema_org_markup()
  718.                             &&
  719.                             isset($items[$i]['url'])
  720.                         ) {
  721.                             echo '<meta itemprop="url" content="' . esc_attr( $items[ $i ]['url'] ) . '"/>';
  722.                         }
  723.  
  724.                         echo $separator;
  725.  
  726.                         echo '</span>';
  727.                     } else {
  728.                         echo '<span class="' . ($i - 1) . '-item" ' . blocksy_schema_org_definitions('breadcrumb_item') . '>';
  729.  
  730.                         if (blocksy_has_schema_org_markup()) {
  731.                             echo '<meta itemprop="position" content="' . ($i + 1) . '">';
  732.                         }
  733.  
  734.                         if (isset($items[$i]['url'])) {
  735.                             echo '<a href="' . esc_attr( $items[ $i ]['url'] ) . '" ' . blocksy_schema_org_definitions('item') . '>';
  736.  
  737.                             if (isset($items[$i]['icon'])) {
  738.                                 echo $items[$i]['icon'];
  739.                             }
  740.  
  741.                             echo '<span ' . blocksy_schema_org_definitions('name') . '>';
  742.                             echo $items[ $i ]['name'];
  743.                             echo '</span>';
  744.  
  745.                             echo '</a>';
  746.                         } else {
  747.                             echo $items[$i]['name'];
  748.                         }
  749.  
  750.                         if (
  751.                             blocksy_has_schema_org_markup()
  752.                             &&
  753.                             isset($items[$i]['url'])
  754.                         ) {
  755.                             echo '<meta itemprop="url" content="' . esc_attr( $items[ $i ]['url'] ) . '"/>';
  756.                         }
  757.  
  758.                         echo $separator;
  759.  
  760.                         echo '</span>';
  761.                     }
  762.  
  763.                 } ?>
  764.             </nav>
  765.  
  766.         <?php
  767.  
  768.         return ob_get_clean();
  769.     }
  770. }
  771.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement