bbp_get_breadcrumb( $args = array() )
Return a breadcrumb ( forum -> topic -> reply )
Description Description
Parameters Parameters
- $sep
-
(Required) Separator. Defaults to '←'
- $current_page
-
(Required) Include the current item
- $root
-
(Required) Include the root page if one exists
Return Return
(string) Breadcrumbs
Source Source
File: includes/common/template.php
function bbp_get_breadcrumb( $args = array() ) { // Turn off breadcrumbs if ( apply_filters( 'bbp_no_breadcrumb', is_front_page() ) ) { return; } // Define variables $front_id = $root_id = 0; $ancestors = $crumbs = $tag_data = array(); $pre_root_text = $pre_front_text = $pre_current_text = ''; $pre_include_root = $pre_include_home = $pre_include_current = true; /** Home Text *********************************************************/ // No custom home text if ( empty( $args['home_text'] ) ) { $front_id = get_option( 'page_on_front' ); // Set home text to page title if ( ! empty( $front_id ) ) { $pre_front_text = get_the_title( $front_id ); // Default to 'Home' } else { $pre_front_text = esc_html__( 'Home', 'bbpress' ); } } /** Root Text *********************************************************/ // No custom root text if ( empty( $args['root_text'] ) ) { $page = bbp_get_page_by_path( bbp_get_root_slug() ); if ( ! empty( $page ) ) { $root_id = $page->ID; } $pre_root_text = bbp_get_forum_archive_title(); } /** Includes **********************************************************/ // Root slug is also the front page if ( ! empty( $front_id ) && ( $front_id === $root_id ) ) { $pre_include_root = false; } // Don't show root if viewing forum archive if ( bbp_is_forum_archive() ) { $pre_include_root = false; } // Don't show root if viewing page in place of forum archive if ( ! empty( $root_id ) && ( ( is_single() || is_page() ) && ( $root_id === get_the_ID() ) ) ) { $pre_include_root = false; } /** Current Text ******************************************************/ // Search page if ( bbp_is_search() ) { $pre_current_text = bbp_get_search_title(); // Forum archive } elseif ( bbp_is_forum_archive() ) { $pre_current_text = bbp_get_forum_archive_title(); // Topic archive } elseif ( bbp_is_topic_archive() ) { $pre_current_text = bbp_get_topic_archive_title(); // View } elseif ( bbp_is_single_view() ) { $pre_current_text = bbp_get_view_title(); // Single Forum } elseif ( bbp_is_single_forum() ) { $pre_current_text = bbp_get_forum_title(); // Single Topic } elseif ( bbp_is_single_topic() ) { $pre_current_text = bbp_get_topic_title(); // Single Topic } elseif ( bbp_is_single_reply() ) { $pre_current_text = bbp_get_reply_title(); // Topic Tag (or theme compat topic tag) } elseif ( bbp_is_topic_tag() || ( get_query_var( 'bbp_topic_tag' ) && ! bbp_is_topic_tag_edit() ) ) { // Always include the tag name $tag_data[] = bbp_get_topic_tag_name(); // If capable, include a link to edit the tag if ( current_user_can( 'manage_topic_tags' ) ) { $tag_data[] = '<a href="' . esc_url( bbp_get_topic_tag_edit_link() ) . '" class="bbp-edit-topic-tag-link">' . esc_html__( '(Edit)', 'bbpress' ) . '</a>'; } // Implode the results of the tag data $pre_current_text = sprintf( esc_html__( 'Topic Tag: %s', 'bbpress' ), implode( ' ', $tag_data ) ); // Edit Topic Tag } elseif ( bbp_is_topic_tag_edit() ) { $pre_current_text = esc_html__( 'Edit', 'bbpress' ); // Single } else { $pre_current_text = get_the_title(); } /** Parse Args ********************************************************/ // Parse args $r = bbp_parse_args( $args, array( // HTML 'before' => '<div class="bbp-breadcrumb"><p>', 'after' => '</p></div>', // Separator 'sep' => is_rtl() ? __( '‹', 'bbpress' ) : __( '›', 'bbpress' ), 'pad_sep' => 1, 'sep_before' => '<span class="bbp-breadcrumb-sep">', 'sep_after' => '</span>', // Crumbs 'crumb_before' => '', 'crumb_after' => '', // Home 'include_home' => $pre_include_home, 'home_text' => $pre_front_text, // Forum root 'include_root' => $pre_include_root, 'root_text' => $pre_root_text, // Current 'include_current' => $pre_include_current, 'current_text' => $pre_current_text, 'current_before' => '<span class="bbp-breadcrumb-current">', 'current_after' => '</span>', ), 'get_breadcrumb' ); /** Ancestors *********************************************************/ // Get post ancestors if ( is_singular() || bbp_is_forum_edit() || bbp_is_topic_edit() || bbp_is_reply_edit() ) { $ancestors = array_reverse( (array) get_post_ancestors( get_the_ID() ) ); } // Do we want to include a link to home? if ( ! empty( $r['include_home'] ) || empty( $r['home_text'] ) ) { $crumbs[] = '<a href="' . esc_url( home_url() ) . '" class="bbp-breadcrumb-home">' . $r['home_text'] . '</a>'; } // Do we want to include a link to the forum root? if ( ! empty( $r['include_root'] ) || empty( $r['root_text'] ) ) { // Page exists at root slug path, so use its permalink $page = bbp_get_page_by_path( bbp_get_root_slug() ); if ( ! empty( $page ) ) { $root_url = get_permalink( $page->ID ); // Use the root slug } else { $root_url = get_post_type_archive_link( bbp_get_forum_post_type() ); } // Add the breadcrumb $crumbs[] = '<a href="' . esc_url( $root_url ) . '" class="bbp-breadcrumb-root">' . $r['root_text'] . '</a>'; } // Ancestors exist if ( ! empty( $ancestors ) ) { // Loop through parents foreach ( (array) $ancestors as $parent_id ) { // Parents $parent = get_post( $parent_id ); // Skip parent if empty or error if ( empty( $parent ) || is_wp_error( $parent ) ) { continue; } // Switch through post_type to ensure correct filters are applied switch ( $parent->post_type ) { // Forum case bbp_get_forum_post_type() : $crumbs[] = '<a href="' . esc_url( bbp_get_forum_permalink( $parent->ID ) ) . '" class="bbp-breadcrumb-forum">' . bbp_get_forum_title( $parent->ID ) . '</a>'; break; // Topic case bbp_get_topic_post_type() : $crumbs[] = '<a href="' . esc_url( bbp_get_topic_permalink( $parent->ID ) ) . '" class="bbp-breadcrumb-topic">' . bbp_get_topic_title( $parent->ID ) . '</a>'; break; // Reply (Note: not in most themes) case bbp_get_reply_post_type() : $crumbs[] = '<a href="' . esc_url( bbp_get_reply_permalink( $parent->ID ) ) . '" class="bbp-breadcrumb-reply">' . bbp_get_reply_title( $parent->ID ) . '</a>'; break; // WordPress Post/Page/Other default : $crumbs[] = '<a href="' . esc_url( get_permalink( $parent->ID ) ) . '" class="bbp-breadcrumb-item">' . get_the_title( $parent->ID ) . '</a>'; break; } } // Edit topic tag } elseif ( bbp_is_topic_tag_edit() ) { $crumbs[] = '<a href="' . esc_url( get_term_link( bbp_get_topic_tag_id(), bbp_get_topic_tag_tax_id() ) ) . '" class="bbp-breadcrumb-topic-tag">' . sprintf( esc_html__( 'Topic Tag: %s', 'bbpress' ), bbp_get_topic_tag_name() ) . '</a>'; // Search } elseif ( bbp_is_search() && bbp_get_search_terms() ) { $crumbs[] = '<a href="' . esc_url( bbp_get_search_url() ) . '" class="bbp-breadcrumb-search">' . esc_html__( 'Search', 'bbpress' ) . '</a>'; } /** Current ***********************************************************/ // Add current page to breadcrumb if ( ! empty( $r['include_current'] ) || empty( $r['current_text'] ) ) { $crumbs[] = $r['current_before'] . $r['current_text'] . $r['current_after']; } /** Separator *********************************************************/ // Wrap the separator in before/after before padding and filter if ( ! empty( $r['sep'] ) ) { $sep = $r['sep_before'] . $r['sep'] . $r['sep_after']; } else { $sep = ''; } // Pad the separator if ( ! empty( $r['pad_sep'] ) ) { if ( function_exists( 'mb_strlen' ) ) { $sep = str_pad( $sep, mb_strlen( $sep ) + ( (int) $r['pad_sep'] * 2 ), ' ', STR_PAD_BOTH ); } else { $sep = str_pad( $sep, strlen( $sep ) + ( (int) $r['pad_sep'] * 2 ), ' ', STR_PAD_BOTH ); } } /** Finish Up *********************************************************/ // Filter the separator and breadcrumb $sep = apply_filters( 'bbp_breadcrumb_separator', $sep ); $crumbs = apply_filters( 'bbp_breadcrumbs', $crumbs ); // Build the trail $trail = ! empty( $crumbs ) ? ( $r['before'] . $r['crumb_before'] . implode( $sep . $r['crumb_after'] . $r['crumb_before'] , $crumbs ) . $r['crumb_after'] . $r['after'] ) : ''; // Filter & return return apply_filters( 'bbp_get_breadcrumb', $trail, $crumbs, $r, $args ); }
Changelog Changelog
Version | Description |
---|---|
2.0.0 | Introduced. |