mirror of
https://github.com/Frumph/comicpress.git
synced 2026-01-31 02:05:17 +01:00
201 lines
8.8 KiB
PHP
201 lines
8.8 KiB
PHP
<?php
|
||
/**
|
||
* WordPress Breadcrumbs
|
||
* author: Dimox
|
||
* version: 2015.09.14
|
||
* license: MIT
|
||
*/
|
||
function comicpress_breadcrumbs() {
|
||
|
||
/* === OPTIONS === */
|
||
/* translators: Home link for breadcrumps */
|
||
$text['home'] = __( 'Home', 'comicpress' ) ;
|
||
/* translators: Text for a category page for breadcrumps */
|
||
$text['category'] = __( 'Archive by Category "%s"', 'comicpress' ) ;
|
||
/* translators: Text for a search results page for breadcrumps */
|
||
$text['search'] = __( 'Search Results for "%s" Query', 'comicpress' ) ;
|
||
/* translators: Text for a tag page for breadcrumps */
|
||
$text['tag'] = __( 'Posts Tagged "%s"', 'comicpress' ) ;
|
||
/* translators: Text for an author page for breadcrumps */
|
||
$text['author'] = __( 'Articles Posted by %s', 'comicpress' ) ;
|
||
/* translators: Text for the 404 page for breadcrumps */
|
||
$text['404'] = __( 'Error 404', 'comicpress' ) ;
|
||
/* translators: Text 'Page N' for breadcrumps */
|
||
$text['page'] = __( 'Page %s', 'comicpress' ) ;
|
||
/* translators: Text 'Comment Page N' for breadcrumps */
|
||
$text['cpage'] = __( 'Comment Page %s', 'comicpress' ) ;
|
||
|
||
$wrap_before = '<div class="breadcrumbs">'; // the opening wrapper tag
|
||
$wrap_after = '</div><!-- .breadcrumbs -->'; // the closing wrapper tag
|
||
$sep = '›'; // separator between crumbs
|
||
$sep_before = '<span class="sep">'; // tag before separator
|
||
$sep_after = '</span>'; // tag after separator
|
||
$show_home_link = 1; // 1 - show the 'Home' link, 0 - don't show
|
||
$show_on_home = 0; // 1 - show breadcrumbs on the homepage, 0 - don't show
|
||
$show_current = 1; // 1 - show current page title, 0 - don't show
|
||
$before = '<span class="current">'; // tag before the current crumb
|
||
$after = '</span>'; // tag after the current crumb
|
||
/* === END OF OPTIONS === */
|
||
|
||
if ( ! is_home() && ! is_front_page() || is_paged() ) {
|
||
|
||
echo '<div id="breadcrumb-wrapper">';
|
||
echo '<div class="breadcrumbs">';
|
||
global $post;
|
||
$home_link = home_url( '/' );
|
||
$link_before = '<span itemscope itemtype="http://data-vocabulary.org/Breadcrumb">';
|
||
$link_after = '</span>';
|
||
$link_attr = ' itemprop="url"';
|
||
$link_in_before = '<span itemprop="title">';
|
||
$link_in_after = '</span>';
|
||
$link = $link_before . '<a href="%1$s"' . $link_attr . '>' . $link_in_before . '%2$s' . $link_in_after . '</a>' . $link_after;
|
||
$frontpage_id = get_option( 'page_on_front' );
|
||
$parent_id = ( ! empty( $post ) ) ? $post->post_parent : false;
|
||
$sep = ' ' . $sep_before . $sep . $sep_after . ' ';
|
||
|
||
if ( is_home() || is_front_page() ) {
|
||
|
||
if ( $show_on_home ) echo $wrap_before . '<a href="' . $home_link . '">' . $text['home'] . '</a>' . $wrap_after;
|
||
|
||
} else {
|
||
|
||
echo $wrap_before;
|
||
if ( $show_home_link ) echo sprintf( $link, $home_link, $text['home'] );
|
||
|
||
if ( is_category() ) {
|
||
$cat = get_category( get_query_var( 'cat' ), false );
|
||
if ( $cat->parent != 0 ) {
|
||
$cats = get_category_parents( $cat->parent, TRUE, $sep );
|
||
$cats = preg_replace( "#^(.+)$sep$#", "$1", $cats );
|
||
$cats = preg_replace( '#<a([^>]+)>([^<]+)<\/a>#', $link_before . '<a$1' . $link_attr .'>' . $link_in_before . '$2' . $link_in_after .'</a>' . $link_after, $cats );
|
||
if ( $show_home_link ) echo $sep;
|
||
echo $cats;
|
||
}
|
||
if ( get_query_var( 'paged' ) ) {
|
||
$cat = $cat->cat_ID;
|
||
echo $sep . sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ) ) . $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
|
||
} else {
|
||
if ( $show_current ) echo $sep . $before . sprintf( $text['category'], single_cat_title( '', false ) ) . $after;
|
||
}
|
||
|
||
} elseif ( is_search() ) {
|
||
if ( have_posts() ) {
|
||
if ( $show_home_link && $show_current ) echo $sep;
|
||
if ( $show_current ) echo $before . sprintf( $text['search'], get_search_query() ) . $after;
|
||
} else {
|
||
if ( $show_home_link ) echo $sep;
|
||
echo $before . sprintf( $text['search'], get_search_query() ) . $after;
|
||
}
|
||
|
||
} elseif ( is_day() ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
echo sprintf( $link, get_year_link( get_the_time( 'Y' ) ), get_the_time( 'Y' ) ) . $sep;
|
||
echo sprintf( $link, get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ), get_the_time( 'F' ) );
|
||
if ( $show_current ) echo $sep . $before . get_the_time(' d' ) . $after;
|
||
|
||
} elseif ( is_month() ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
echo sprintf( $link, get_year_link( get_the_time( 'Y' ) ), get_the_time( 'Y' ) );
|
||
if ( $show_current ) echo $sep . $before . get_the_time( 'F' ) . $after;
|
||
|
||
} elseif ( is_year() ) {
|
||
if ( $show_home_link && $show_current ) echo $sep;
|
||
if ( $show_current ) echo $before . get_the_time( 'Y' ) . $after;
|
||
|
||
} elseif ( is_single() && ! is_attachment() ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
if ( get_post_type() != 'post' ) {
|
||
$post_type = get_post_type_object( get_post_type() );
|
||
$slug = $post_type->rewrite;
|
||
printf( $link, $home_link . '/' . $slug['slug'] . '/', $post_type->labels->singular_name );
|
||
if ($show_current) echo $sep . $before . get_the_title() . $after;
|
||
} else {
|
||
$cat = get_the_category(); $cat = $cat[0];
|
||
$cats = get_category_parents( $cat, TRUE, $sep );
|
||
if ( ! $show_current || get_query_var( 'cpage' ) ) $cats = preg_replace( "#^(.+)$sep$#", "$1", $cats );
|
||
$cats = preg_replace( '#<a([^>]+)>([^<]+)<\/a>#', $link_before . '<a$1' . $link_attr .'>' . $link_in_before . '$2' . $link_in_after .'</a>' . $link_after, $cats );
|
||
echo $cats;
|
||
if ( get_query_var( 'cpage' ) ) {
|
||
echo $sep . sprintf( $link, get_permalink(), get_the_title()) . $sep . $before . sprintf( $text['cpage'], get_query_var( 'cpage' ) ) . $after;
|
||
} else {
|
||
if ($show_current) echo $before . get_the_title() . $after;
|
||
}
|
||
}
|
||
|
||
// Custom post type.
|
||
} elseif ( ! is_single() && ! is_page() && get_post_type() != 'post' && ! is_404() ) {
|
||
$post_type = get_post_type_object( get_post_type() );
|
||
if ( get_query_var( 'paged' ) ) {
|
||
echo $sep . sprintf( $link, get_post_type_archive_link( $post_type->name), $post_type->label ) . $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
|
||
} else {
|
||
if ( $show_current ) echo $sep . $before . $post_type->label . $after;
|
||
}
|
||
|
||
} elseif ( is_attachment() ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
$parent = get_post( $parent_id );
|
||
$cat = get_the_category( $parent->ID ); $cat = $cat[0];
|
||
if ( $cat ) {
|
||
$cats = get_category_parents( $cat, TRUE, $sep );
|
||
$cats = preg_replace( '#<a([^>]+)>([^<]+)<\/a>#', $link_before . '<a$1' . $link_attr .'>' . $link_in_before . '$2' . $link_in_after .'</a>' . $link_after, $cats );
|
||
echo $cats;
|
||
}
|
||
printf( $link, get_permalink( $parent ), $parent->post_title );
|
||
if ( $show_current ) echo $sep . $before . get_the_title() . $after;
|
||
|
||
} elseif ( is_page() && ! $parent_id ) {
|
||
if ( $show_current ) echo $sep . $before . get_the_title() . $after;
|
||
|
||
} elseif ( is_page() && $parent_id ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
if ( $parent_id != $frontpage_id ) {
|
||
$breadcrumbs = array();
|
||
while ( $parent_id ) {
|
||
$page = get_page( $parent_id );
|
||
if ($parent_id != $frontpage_id ) {
|
||
$breadcrumbs[] = sprintf( $link, get_permalink( $page->ID ), get_the_title( $page->ID ) );
|
||
}
|
||
$parent_id = $page->post_parent;
|
||
}
|
||
$breadcrumbs = array_reverse($breadcrumbs);
|
||
for ($i = 0; $i < count( $breadcrumbs ); $i++) {
|
||
echo $breadcrumbs[$i];
|
||
if ($i != count( $breadcrumbs )-1) echo $sep;
|
||
}
|
||
}
|
||
if ( $show_current ) echo $sep . $before . get_the_title() . $after;
|
||
|
||
} elseif ( is_tag() ) {
|
||
if ( get_query_var( 'paged' ) ) {
|
||
$tag_id = get_queried_object_id();
|
||
$tag = get_tag( $tag_id );
|
||
echo $sep . sprintf( $link, get_tag_link( $tag_id), $tag->name) . $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
|
||
} else {
|
||
if ( $show_current ) echo $sep . $before . sprintf( $text['tag'], single_tag_title('', false ) ) . $after;
|
||
}
|
||
|
||
} elseif ( is_author() ) {
|
||
global $author;
|
||
$author = get_userdata( $author );
|
||
if ( get_query_var('paged') ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
echo sprintf( $link, get_author_posts_url( $author->ID ), $author->display_name) . $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
|
||
} else {
|
||
if ( $show_home_link && $show_current ) echo $sep;
|
||
if ( $show_current ) echo $before . sprintf( $text['author'], $author->display_name ) . $after;
|
||
}
|
||
|
||
} elseif ( is_404() ) {
|
||
if ( $show_home_link && $show_current ) echo $sep;
|
||
if ( $show_current ) echo $before . $text['404'] . $after;
|
||
|
||
} elseif ( has_post_format() && !is_singular() ) {
|
||
if ( $show_home_link ) echo $sep;
|
||
echo get_post_format_string( get_post_format() );
|
||
}
|
||
echo $wrap_after;
|
||
}
|
||
echo '</div></div>';
|
||
}
|
||
} // end of dimox_breadcrumbs()
|