Astra_Breadcrumb_Trail::trail()
Formats the HTML output for the breadcrumb trail.
Description
Return
(string)
Source
File: inc/addons/breadcrumbs/class-astra-breadcrumb-trail.php
public function trail() { // Set up variables that we'll need. $breadcrumb = ''; $item_count = count( $this->items ); $item_position = 0; $meta = ''; if ( 2 > $item_count ) { $this->args['schema'] = false; } // Connect the breadcrumb trail if there are items in the trail. if ( 0 < $item_count ) { // Add 'browse' label if it should be shown. if ( true === $this->args['show_browse'] ) { $breadcrumb .= sprintf( '<%1$s class="trail-browse">%2$s</%1$s>', tag_escape( $this->args['browse_tag'] ), $this->labels['browse'] ); } // Open the unordered list. $breadcrumb .= sprintf( '<%1$s class="trail-items" %2$s>', tag_escape( $this->args['list_tag'] ), ( $this->args['schema'] ? 'itemscope itemtype="http://schema.org/BreadcrumbList"' : '' ) ); if ( $this->args['schema'] ) { // Add the number of items and item list order schema. $breadcrumb .= sprintf( '<meta content="%1$d" %2$s />', absint( $item_count ), astra_attr( 'breadcrumb-trail-items-num-meta', array( 'name' => 'numberOfItems', 'class' => '', ) ) ); $breadcrumb .= '<meta ' . astra_attr( 'breadcrumb-trail-items-list-meta', array( 'class' => '', 'name' => 'itemListOrder', 'content' => 'Ascending', ) ) . '/>'; } // Loop through the items and add them to the list. foreach ( $this->items as $item ) { // Iterate the item position. ++$item_position; // Check if the item is linked. preg_match( '/(<a.*?>)(.*?)(<\/a>)/i', $item, $matches ); // Wrap the item text with appropriate itemprop. $item = ! empty( $matches ) ? sprintf( '%s<span %s>%s</span>%s', $matches[1], $this->args['schema'] ? 'itemprop="name"' : '', $matches[2], $matches[3] ) : sprintf( '<span>%s</span>', $item ); // Wrap the item with its itemprop. $item = ( ! empty( $matches ) && $this->args['schema'] ) ? preg_replace( '/(<a.*?)([\'"])>/i', '$1$2 itemprop=$2item$2>', $item ) : sprintf( '<span>%s</span>', $item ); // Add list item classes. $item_class = 'trail-item'; $item_schema_attr = 'itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"'; if ( 1 === $item_position && 1 < $item_count ) { $item_class .= ' trail-begin'; } elseif ( $item_count === $item_position ) { $item_class .= ' trail-end'; $item_schema_attr = ''; } // Create list item attributes. $attributes = $this->args['schema'] ? $item_schema_attr : ''; $attributes .= ' class="' . $item_class . '"'; if ( $this->args['schema'] ) { // Build the meta position HTML. $meta = sprintf( '<meta itemprop="position" content="%s" />', absint( $item_position ) ); } if ( $item_count === $item_position ) { $meta = ''; } // Build the list item. $breadcrumb .= sprintf( '<%1$s %2$s>%3$s%4$s</%1$s>', tag_escape( $this->args['item_tag'] ),$attributes, $item, $meta ); } // Close the unordered list. $breadcrumb .= sprintf( '</%s>', tag_escape( $this->args['list_tag'] ) ); // Wrap the breadcrumb trail. $breadcrumb = sprintf( '<%1$s role="navigation" aria-label="%2$s" class="breadcrumb-trail breadcrumbs" >%3$s%4$s%5$s</%1$s>', tag_escape( $this->args['container'] ), esc_attr( $this->labels['aria_label'] ), $this->args['before'], $breadcrumb, $this->args['after'] ); } // Allow developers to filter the breadcrumb trail HTML. $breadcrumb = apply_filters( 'astra_breadcrumb_trail', $breadcrumb, $this->args ); if ( false === $this->args['echo'] ) { return $breadcrumb; } echo $breadcrumb; }
Expand full source code Collapse full source code View on Trac
Changelog
Version | Description |
---|---|
0.6.0 | Introduced. |