bbp_get_breadcrumb( $args = array() )
Return a breadcrumb ( forum -> topic -> reply )
Description
Parameters
- $sep
-
(Required) Separator. Defaults to '←'
- $current_page
-
(Required) Include the current item
- $root
-
(Required) Include the root page if one exists
Return
(string) Breadcrumbs
Source
File: bp-forums/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 = __( 'Home', 'buddyboss' ); } } /** 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)', 'buddyboss' ) . '</a>'; } // Implode the results of the tag data $pre_current_text = sprintf( __( 'Discussion Tag: %s', 'buddyboss' ), implode( ' ', $tag_data ) ); // Edit Topic Tag } elseif ( bbp_is_topic_tag_edit() ) { $pre_current_text = __( 'Edit', 'buddyboss' ); // 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() ? __( '‹', 'buddyboss' ) : __( '›', 'buddyboss' ), '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="' . trailingslashit( 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( __( 'Discussion Tag: %s', 'buddyboss' ), 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', 'buddyboss' ) . '</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']; } // 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'] ) : ''; return apply_filters( 'bbp_get_breadcrumb', $trail, $crumbs, $r ); }
Changelog
Version | Description |
---|---|
bbPress (r2589) | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.