/functions.php
PHP | 1081 lines | 519 code | 152 blank | 410 comment | 50 complexity | f6d8ac5cd1a827abfc4762834095de45 MD5 | raw file
Possible License(s): GPL-3.0
- <?php
- /** functions.php
- *
- * @author Konstantin Obenland
- * @package The Bootstrap
- * @since 1.0.0 - 05.02.2012
- */
-
-
- if ( ! function_exists( 'the_bootstrap_setup' ) ):
- /**
- * Sets up theme defaults and registers support for various WordPress features.
- *
- * @author WordPress.org
- * @since 1.0.0 - 05.02.2012
- *
- * @return void
- */
- function the_bootstrap_setup() {
- global $content_width;
-
- if ( ! isset( $content_width ) ) {
- $content_width = 770;
- }
-
- load_theme_textdomain( 'the-bootstrap', get_template_directory() . '/lang' );
-
- add_theme_support( 'automatic-feed-links' );
-
- add_theme_support( 'post-thumbnails' );
-
- add_theme_support( 'post-formats', array(
- 'aside',
- 'chat',
- 'link',
- 'gallery',
- 'status',
- 'quote',
- 'image',
- 'video'
- ) );
-
- add_theme_support( 'tha_hooks', array( 'all' ) );
-
- if ( version_compare( get_bloginfo( 'version' ), '3.4', '<' ) )
- // Custom Theme Options
- require_once( get_template_directory() . '/inc/theme-options.php' );
- else
- // Implement the Theme Customizer script
- require_once( get_template_directory() . '/inc/theme-customizer.php' );
-
- /**
- * Custom template tags for this theme.
- */
- require_once( get_template_directory() . '/inc/template-tags.php' );
-
- /**
- * Implement the Custom Header feature
- */
- require_once( get_template_directory() . '/inc/custom-header.php' );
-
- /**
- * Custom Nav Menu handler for the Navbar.
- */
- require_once( get_template_directory() . '/inc/nav-menu-walker.php' );
-
- /**
- * Theme Hook Alliance
- */
- require_if_theme_supports( 'tha_hooks', get_template_directory() . '/inc/tha-theme-hooks.php' );
-
- /**
- * Including three menu (header-menu, primary and footer-menu).
- * Primary is wrapping in a navbar containing div (wich support responsive variation)
- * Header-menu and Footer-menu are inside pills dropdown menu
- *
- * @since 1.2.2 - 07.04.2012
- * @see http://codex.wordpress.org/Function_Reference/register_nav_menus
- */
- register_nav_menus( array(
- 'primary' => __( 'Main Navigation', 'the-bootstrap' ),
- 'header-menu' => __( 'Header Menu', 'the-bootstrap' ),
- 'footer-menu' => __( 'Footer Menu', 'the-bootstrap' )
- ) );
-
- } // the_bootstrap_setup
- endif;
- add_action( 'after_setup_theme', 'the_bootstrap_setup' );
-
-
- /**
- * Returns the options object for The Bootstrap.
- *
- * @author Automattic
- * @since 1.3.0 - 06.04.2012
- *
- * @return stdClass Theme Options
- */
- function the_bootstrap_options() {
- return (object) wp_parse_args(
- get_option( 'the_bootstrap_theme_options', array() ),
- the_bootstrap_get_default_theme_options()
- );
- }
-
-
- /**
- * Returns the default options for The Bootstrap.
- *
- * @author Automattic
- * @since 1.3.0 - 06.04.2012
- *
- * @return void
- */
- function the_bootstrap_get_default_theme_options() {
- $default_theme_options = array(
- 'theme_layout' => 'content-sidebar',
- 'navbar_site_name' => false,
- 'navbar_searchform' => true,
- 'navbar_inverse' => true,
- 'navbar_position' => 'static',
- );
-
- return apply_filters( 'the_bootstrap_default_theme_options', $default_theme_options );
- }
-
-
- /**
- * Adds The Bootstrap layout classes to the array of body classes.
- *
- * @author WordPress.org
- * @since 1.3.0 - 06.04.2012
- *
- * @return void
- */
- function the_bootstrap_layout_classes( $existing_classes ) {
- $classes = array( the_bootstrap_options()->theme_layout );
- $classes = apply_filters( 'the_bootstrap_layout_classes', $classes );
-
- return array_merge( $existing_classes, $classes );
- }
- add_filter( 'body_class', 'the_bootstrap_layout_classes' );
-
-
- /**
- * Adds Custom Background support
- *
- * @author Konstantin Obenland
- * @since 1.2.5 - 11.04.2012
- *
- * @return void
- */
- function the_bootstrap_custom_background_setup() {
-
- $args = apply_filters( 'the_bootstrap_custom_background_args', array(
- 'default-color' => 'EFEFEF',
- ) );
-
- add_theme_support( 'custom-background', $args );
-
- if ( ! function_exists( 'wp_get_theme' ) ) {
- // Compat: Versions of WordPress prior to 3.4.
- define( 'BACKGROUND_COLOR', $args['default-color'] );
- add_custom_background();
- }
- }
- add_action( 'after_setup_theme', 'the_bootstrap_custom_background_setup' );
-
-
- /**
- * Register the sidebars.
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @return void
- */
- function the_bootstrap_widgets_init() {
-
- register_sidebar( array(
- 'name' => __( 'Main Sidebar', 'the-bootstrap' ),
- 'id' => 'main',
- 'before_widget' => '<aside id="%1$s" class="widget well %2$s">',
- 'after_widget' => '</aside>',
- 'before_title' => '<h2 class="widget-title">',
- 'after_title' => '</h2>',
- ) );
-
- register_sidebar( array(
- 'name' => __( 'Image Sidebar', 'the-bootstrap' ),
- 'description' => __( 'Shown on image attachment pages.', 'the-bootstrap' ),
- 'id' => 'image',
- 'before_widget' => '<aside id="%1$s" class="widget well %2$s">',
- 'after_widget' => '</aside>',
- 'before_title' => '<h2 class="widget-title">',
- 'after_title' => '</h2>',
- ) );
-
- include_once( 'inc/the-bootstrap-image-meta-widget.php' );
- register_widget( 'The_Bootstrap_Image_Meta_Widget' );
-
- include_once( 'inc/the-bootstrap-gallery-widget.php' );
- register_widget( 'The_Bootstrap_Gallery_Widget' );
- }
- add_action( 'widgets_init', 'the_bootstrap_widgets_init' );
-
-
- /**
- * Registration of theme scripts and styles
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @return void
- */
- function the_bootstrap_register_scripts_styles() {
-
- if ( ! is_admin() ) {
- $theme_version = _the_bootstrap_version();
- $suffix = ( defined('SCRIPT_DEBUG') AND SCRIPT_DEBUG ) ? '' : '.min';
-
- /**
- * Scripts
- */
- wp_register_script(
- 'tw-bootstrap',
- get_template_directory_uri() . "/js/bootstrap{$suffix}.js",
- array('jquery'),
- '2.0.3',
- true
- );
-
- wp_register_script(
- 'the-bootstrap',
- get_template_directory_uri() . "/js/the-bootstrap{$suffix}.js",
- array('tw-bootstrap'),
- $theme_version,
- true
- );
-
- /**
- * Styles
- */
- wp_register_style(
- 'tw-bootstrap',
- get_template_directory_uri() . "/css/bootstrap{$suffix}.css",
- array(),
- '2.0.3'
- );
-
- wp_register_style(
- 'the-bootstrap',
- get_template_directory_uri() . "/style{$suffix}.css",
- array('tw-bootstrap'),
- $theme_version
- );
- }
- }
- add_action( 'init', 'the_bootstrap_register_scripts_styles' );
-
-
- /**
- * Properly enqueue frontend scripts
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @return void
- */
- function the_bootstrap_print_scripts() {
- wp_enqueue_script( 'the-bootstrap' );
- }
- add_action( 'wp_enqueue_scripts', 'the_bootstrap_print_scripts' );
-
-
- /**
- * Adds IE specific scripts
- *
- * Respond.js has to be loaded after Theme styles
- *
- * @author Konstantin Obenland
- * @since 1.7.0 - 11.06.2012
- *
- * @return void
- */
- function the_bootstrap_print_ie_scripts() {
- ?>
- <!--[if lt IE 9]>
- <script src="<?php echo get_template_directory_uri(); ?>/js/html5shiv.min.js" type="text/javascript"></script>
- <script src="<?php echo get_template_directory_uri(); ?>/js/respond.min.js" type="text/javascript"></script>
- <![endif]-->
- <?php
- }
- add_action( 'wp_head', 'the_bootstrap_print_ie_scripts', 11 );
-
-
- /**
- * Properly enqueue comment-reply script
- *
- * @author Konstantin Obenland
- * @since 1.4.0 - 08.05.2012
- *
- * @return void
- */
- function the_bootstrap_comment_reply() {
- if ( get_option( 'thread_comments' ) ) {
- wp_enqueue_script( 'comment-reply' );
- }
- }
- add_action( 'comment_form_before', 'the_bootstrap_comment_reply' );
-
-
- /**
- * Properly enqueue frontend styles
- *
- * Since 'tw-bootstrap' was registered as a dependency, it'll get enqueued
- * automatically
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @return void
- */
- function the_bootstrap_print_styles() {
- if ( is_child_theme() ) {
- wp_enqueue_style( 'the-bootstrap-child', get_stylesheet_uri(), array( 'the-bootstrap' ) );
- } else {
- wp_enqueue_style( 'the-bootstrap' );
- }
-
- if ( 'static' != the_bootstrap_options()->navbar_position ) {
- $top_bottom = str_replace( 'navbar-fixed-', '', the_bootstrap_options()->navbar_position );
- $css = "body > .container{margin-{$top_bottom}:68px;}@media(min-width: 980px){body > .container{margin-{$top_bottom}:58px;}}";
-
- if ( is_admin_bar_showing() AND 'top' == $top_bottom )
- $css .= '.navbar.navbar-fixed-top{margin-top:28px;}';
-
- if ( function_exists( 'wp_add_inline_style' ) )
- wp_add_inline_style( 'the-bootstrap', $css );
- else
- echo "<style type='text/css'>\n{$css}\n</style>\n";
- }
- }
- add_action( 'wp_enqueue_scripts', 'the_bootstrap_print_styles' );
-
-
- if ( ! function_exists( 'the_bootstrap_credits' ) ) :
- /**
- * Prints HTML with meta information for the current post-date/time and author,
- * comment and edit link
- *
- * @author Konstantin Obenland
- * @since 1.2.2 - 07.04.2012
- *
- * @return void
- */
- function the_bootstrap_credits() {
- printf(
- '<span class="credits alignleft">' . __( '© %1$s <a href="%2$s">%3$s</a>, all rights reserved.', 'the-bootstrap' ) . '</span>',
- date( 'Y' ),
- home_url( '/' ),
- get_bloginfo( 'name' )
- );
- }
- endif;
-
-
- /**
- * Returns the blogname if no title was set.
- *
- * @author Konstantin Obenland
- * @since 1.1.0 - 18.03.2012
- *
- * @param string $title
- * @param string $sep
- *
- * @return string
- */
- function the_bootstrap_wp_title( $title, $sep ) {
-
- if ( ! is_feed() ) {
- $title .= get_bloginfo( 'name' );
-
- if ( is_front_page() ) {
- $title .= " {$sep} " . get_bloginfo( 'description' );
- }
- }
-
- return $title;
- }
- add_filter( 'wp_title', 'the_bootstrap_wp_title', 1, 2 );
-
-
- /**
- * Returns a "Continue Reading" link for excerpts
- *
- * @author WordPress.org
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $more
- *
- * @return string
- */
- function the_bootstrap_continue_reading_link() {
- return ' <a href="'. esc_url( get_permalink() ) . '">' . __( 'Continue reading <span class="meta-nav">→</span>', 'the-bootstrap' ) . '</a>';
- }
-
-
- /**
- * Replaces "[...]" (appended to automatically generated excerpts) with an ellipsis and the_bootstrap_continue_reading_link().
- *
- * To override this in a child theme, remove the filter and add your own
- * function tied to the excerpt_more filter hook.
- *
- * @author WordPress.org
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $more
- *
- * @return string
- */
- function the_bootstrap_auto_excerpt_more( $more ) {
- return '…' . the_bootstrap_continue_reading_link();
- }
- add_filter( 'excerpt_more', 'the_bootstrap_auto_excerpt_more' );
-
-
- /**
- * Adds a pretty "Continue Reading" link to custom post excerpts.
- *
- * To override this link in a child theme, remove the filter and add your own
- * function tied to the get_the_excerpt filter hook.
- *
- * @author WordPress.org
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $output
- *
- * @return string
- */
- function the_bootstrap_custom_excerpt_more( $output ) {
- if ( has_excerpt() AND ! is_attachment() ) {
- $output .= the_bootstrap_continue_reading_link();
- }
- return $output;
- }
- add_filter( 'get_the_excerpt', 'the_bootstrap_custom_excerpt_more' );
-
-
- /**
- * Get the wp_nav_menu() fallback, wp_page_menu(), to show a home link.
- *
- * @author WordPress.org
- * @since 1.0.0 - 05.02.2012
- *
- * @param array $args
- *
- * @return array
- */
- function the_bootstrap_page_menu_args( $args ) {
- $args['show_home'] = true;
- return $args;
- }
- add_filter( 'wp_page_menu_args', 'the_bootstrap_page_menu_args' );
-
-
- /**
- * Filter in a link to a content ID attribute for the next/previous image links on image attachment pages
- *
- * @author Automattic
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $url
- * @param int $id
- *
- * @return string
- */
- function the_bootstrap_enhanced_image_navigation( $url, $id ) {
-
- if ( is_attachment() AND wp_attachment_is_image( $id ) ) {
- $image = get_post( $id );
- if ( $image->post_parent AND $image->post_parent != $id )
- $url .= '#primary';
- }
-
- return $url;
- }
- add_filter( 'attachment_link', 'the_bootstrap_enhanced_image_navigation', 10, 2 );
-
-
- /**
- * Displays comment list, when there are any
- *
- * @author Konstantin Obenland
- * @since 1.7.0 - 16.06.2012
- *
- * @return void
- */
- function the_bootstrap_comments_list() {
- if ( post_password_required() ) : ?>
- <div id="comments">
- <p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'the-bootstrap' ); ?></p>
- </div><!-- #comments -->
- <?php
- return;
- endif;
-
-
- if ( have_comments() ) : ?>
- <div id="comments">
- <h2 id="comments-title">
- <?php printf( _n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'the-bootstrap' ),
- number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' ); ?>
- </h2>
-
- <?php the_bootstrap_comment_nav(); ?>
-
- <ol class="commentlist unstyled">
- <?php wp_list_comments( array( 'callback' => 'the_bootstrap_comment' ) ); ?>
- </ol><!-- .commentlist .unstyled -->
-
- <?php the_bootstrap_comment_nav(); ?>
-
- </div><!-- #comments -->
- <?php endif;
- }
- add_action( 'comment_form_before', 'the_bootstrap_comments_list', 0 );
- add_action( 'comment_form_comments_closed', 'the_bootstrap_comments_list', 1 );
-
-
- /**
- * Echoes comments-are-closed message when post type supports comments and we're
- * not on a page
- *
- * @author Konstantin Obenland
- * @since 1.7.0 - 16.06.2012
- *
- * @return void
- */
- function the_bootstrap_comments_closed() {
- if ( ! is_page() AND post_type_supports( get_post_type(), 'comments' ) ) : ?>
- <p class="nocomments"><?php _e( 'Comments are closed.', 'the-bootstrap' ); ?></p>
- <?php endif;
- }
- add_action( 'comment_form_comments_closed', 'the_bootstrap_comments_closed' );
-
-
- /**
- * Filters comments_form() default arguments
- *
- * @author Konstantin Obenland
- * @since 1.7.0 - 16.06.2012
- *
- * @param array $defaults
- *
- * @return array
- */
- function the_bootstrap_comment_form_defaults( $defaults ) {
- return wp_parse_args( array(
- 'comment_field' => '<div class="comment-form-comment control-group"><label class="control-label" for="comment">' . _x( 'Comment', 'noun', 'the-bootstrap' ) . '</label><div class="controls"><textarea class="span7" id="comment" name="comment" rows="8" aria-required="true"></textarea></div></div>',
- 'comment_notes_before' => '',
- 'comment_notes_after' => '<div class="form-allowed-tags control-group"><label class="control-label">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s', 'the-bootstrap' ), '</label><div class="controls"><pre>' . allowed_tags() . '</pre></div>' ) . '</div>
- <div class="form-actions">',
- 'title_reply' => '<legend>' . __( 'Leave a reply', 'the-bootstrap' ) . '</legend>',
- 'title_reply_to' => '<legend>' . __( 'Leave a reply to %s', 'the-bootstrap' ). '</legend>',
- 'must_log_in' => '<div class="must-log-in control-group controls">' . sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.', 'the-bootstrap' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( get_the_ID() ) ) ) ) . '</div>',
- 'logged_in_as' => '<div class="logged-in-as control-group controls">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>', 'the-bootstrap' ), admin_url( 'profile.php' ), wp_get_current_user()->display_name, wp_logout_url( apply_filters( 'the_permalink', get_permalink( get_the_ID() ) ) ) ) . '</div>',
- ), $defaults );
- }
- add_filter( 'comment_form_defaults', 'the_bootstrap_comment_form_defaults' );
-
-
- if ( ! function_exists( 'the_bootstrap_comment' ) ) :
- /**
- * Template for comments and pingbacks.
- *
- * To override this walker in a child theme without modifying the comments template
- * simply create your own the_bootstrap_comment(), and that function will be used instead.
- *
- * Used as a callback by wp_list_comments() for displaying the comments.
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param object $comment Comment data object.
- * @param array $args
- * @param int $depth Depth of comment in reference to parents.
- *
- * @return void
- */
- function the_bootstrap_comment( $comment, $args, $depth ) {
- $GLOBALS['comment'] = $comment;
- if ( 'pingback' == $comment->comment_type OR 'trackback' == $comment->comment_type ) : ?>
-
- <li id="li-comment-<?php comment_ID(); ?>" <?php comment_class(); ?>>
- <p class="row">
- <strong class="ping-label span1"><?php _e( 'Pingback:', 'the-bootstrap' ); ?></strong>
- <span class="span7"><?php comment_author_link(); edit_comment_link( __( 'Edit', 'the-bootstrap' ), '<span class="sep"> </span><span class="edit-link label">', '</span>' ); ?></span>
- </p>
-
- <?php else:
- $offset = $depth - 1;
- $span = 7 - $offset; ?>
-
- <li id="li-comment-<?php comment_ID(); ?>" <?php comment_class(); ?>>
- <article id="comment-<?php comment_ID(); ?>" class="comment row">
- <div class="comment-author-avatar span1<?php if ($offset) echo " offset{$offset}"; ?>">
- <?php echo get_avatar( $comment, 70 ); ?>
- </div>
- <footer class="comment-meta span<?php echo $span; ?>">
- <p class="comment-author vcard">
- <?php
- /* translators: 1: comment author, 2: date and time */
- printf( __( '%1$s <span class="says">said</span> on %2$s:', 'the-bootstrap' ),
- sprintf( '<span class="fn">%s</span>', get_comment_author_link() ),
- sprintf( '<a href="%1$s"><time pubdate datetime="%2$s">%3$s</time></a>',
- esc_url( get_comment_link( $comment->comment_ID ) ),
- get_comment_time( 'c' ),
- /* translators: 1: date, 2: time */
- sprintf( __( '%1$s at %2$s', 'the-bootstrap' ), get_comment_date(), get_comment_time() )
- )
- );
- edit_comment_link( __( 'Edit', 'the-bootstrap' ), '<span class="sep"> </span><span class="edit-link label">', '</span>' ); ?>
- </p><!-- .comment-author .vcard -->
-
- <?php if ( ! $comment->comment_approved ) : ?>
- <div class="comment-awaiting-moderation alert alert-info"><em><?php _e( 'Your comment is awaiting moderation.', 'the-bootstrap' ); ?></em></div>
- <?php endif; ?>
-
- </footer><!-- .comment-meta -->
-
- <div class="comment-content span<?php echo $span; ?>">
- <?php
- comment_text();
- comment_reply_link( array_merge( $args, array(
- 'reply_text' => __( 'Reply <span>↓</span>', 'the-bootstrap' ),
- 'depth' => $depth,
- 'max_depth' => $args['max_depth']
- ) ) ); ?>
- </div><!-- .comment-content -->
- </article><!-- #comment-<?php comment_ID(); ?> .comment -->
-
- <?php endif; // comment_type
- }
- endif; // ends check for the_bootstrap_comment()
-
-
- /**
- * Adds markup to the comment form which is needed to make it work with Bootstrap
- * needs
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $html
- *
- * @return string
- */
- function the_bootstrap_comment_form_top() {
- echo '<div class="form-horizontal">';
- }
- add_action( 'comment_form_top', 'the_bootstrap_comment_form_top' );
-
-
- /**
- * Adds markup to the comment form which is needed to make it work with Bootstrap
- * needs
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $html
- *
- * @return string
- */
- function the_bootstrap_comment_form() {
- echo '</div></div>';
- }
- add_action( 'comment_form', 'the_bootstrap_comment_form' );
-
-
- /**
- * Custom author form field for the comments form
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $html
- *
- * @return string
- */
- function the_bootstrap_comment_form_field_author( $html ) {
- $commenter = wp_get_current_commenter();
- $req = get_option( 'require_name_email' );
- $aria_req = ( $req ? " aria-required='true'" : '' );
-
- return '<div class="comment-form-author control-group">
- <label for="author" class="control-label">' . __( 'Name', 'the-bootstrap' ) . '</label>
- <div class="controls">
- <input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' />
- ' . ( $req ? '<p class="help-inline"><span class="required">' . __('required', 'the-bootstrap') . '</span></p>' : '' ) . '
- </div>
- </div>';
- }
- add_filter( 'comment_form_field_author', 'the_bootstrap_comment_form_field_author');
-
-
- /**
- * Custom HTML5 email form field for the comments form
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $html
- *
- * @return string
- */
- function the_bootstrap_comment_form_field_email( $html ) {
- $commenter = wp_get_current_commenter();
- $req = get_option( 'require_name_email' );
- $aria_req = ( $req ? " aria-required='true'" : '' );
-
- return '<div class="comment-form-email control-group">
- <label for="email" class="control-label">' . __( 'Email', 'the-bootstrap' ) . '</label>
- <div class="controls">
- <input id="email" name="email" type="email" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' />
- <p class="help-inline">' . ( $req ? '<span class="required">' . __('required', 'the-bootstrap') . '</span>, ' : '' ) . __( 'will not be published', 'the-bootstrap' ) . '</p>
- </div>
- </div>';
- }
- add_filter( 'comment_form_field_email', 'the_bootstrap_comment_form_field_email');
-
-
- /**
- * Custom HTML5 url form field for the comments form
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $html
- *
- * @return string
- */
- function the_bootstrap_comment_form_field_url( $html ) {
- $commenter = wp_get_current_commenter();
-
- return '<div class="comment-form-url control-group">
- <label for="url" class="control-label">' . __( 'Website', 'the-bootstrap' ) . '</label>
- <div class="controls">
- <input id="url" name="url" type="url" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" />
- </div>
- </div>';
- }
- add_filter( 'comment_form_field_url', 'the_bootstrap_comment_form_field_url');
-
-
- /**
- * Adjusts an attechment link to hold the class of 'thumbnail' and make it look
- * pretty
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $link
- * @param int $id Post ID.
- * @param string $size Default is 'thumbnail'. Size of image, either array or string.
- * @param bool $permalink Default is false. Whether to add permalink to image.
- * @param bool $icon Default is false. Whether to include icon.
- * @param string $text Default is false. If string, then will be link text.
- *
- * @return string
- */
- function the_bootstrap_get_attachment_link( $link, $id, $size, $permalink, $icon, $text ) {
- return ( ! $text ) ? str_replace( '<a ', '<a class="thumbnail" ', $link ) : $link;
- }
- add_filter( 'wp_get_attachment_link', 'the_bootstrap_get_attachment_link', 10, 6 );
-
-
- /**
- * Adds the 'hero-unit' class for extra big font on sticky posts
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param array $classes
- *
- * @return array
- */
- function the_bootstrap_post_classes( $classes ) {
-
- if ( is_sticky() AND is_home() ) {
- $classes[] = 'hero-unit';
- }
-
- return $classes;
- }
- add_filter( 'post_class', 'the_bootstrap_post_classes' );
-
-
- /**
- * Callback function to display galleries (in HTML5)
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $content
- * @param array $attr
- *
- * @return string
- */
- function the_bootstrap_post_gallery( $content, $attr ) {
- global $instance, $post;
- $instance++;
-
- // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
- if ( isset( $attr['orderby'] ) ) {
- $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
- if ( ! $attr['orderby'] )
- unset( $attr['orderby'] );
- }
-
- extract( shortcode_atts( array(
- 'order' => 'ASC',
- 'orderby' => 'menu_order ID',
- 'id' => $post->ID,
- 'itemtag' => 'figure',
- 'icontag' => 'div',
- 'captiontag' => 'figcaption',
- 'columns' => 3,
- 'size' => 'thumbnail',
- 'include' => '',
- 'exclude' => ''
- ), $attr ) );
-
-
- $id = intval( $id );
- if ( 'RAND' == $order )
- $orderby = 'none';
-
- if ( $include ) {
- $include = preg_replace( '/[^0-9,]+/', '', $include );
- $_attachments = get_posts( array(
- 'include' => $include,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby
- ) );
-
- $attachments = array();
- foreach ( $_attachments as $key => $val ) {
- $attachments[$val->ID] = $_attachments[$key];
- }
- } elseif ( $exclude ) {
- $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
- $attachments = get_children( array(
- 'post_parent' => $id,
- 'exclude' => $exclude,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby
- ) );
- } else {
- $attachments = get_children( array(
- 'post_parent' => $id,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby
- ) );
- }
-
- if ( empty( $attachments ) )
- return;
-
- if ( is_feed() ) {
- $output = "\n";
- foreach ( $attachments as $att_id => $attachment )
- $output .= wp_get_attachment_link( $att_id, $size, true ) . "\n";
- return $output;
- }
-
-
-
- $itemtag = tag_escape( $itemtag );
- $captiontag = tag_escape( $captiontag );
- $columns = intval( min( array( 8, $columns ) ) );
- $float = (is_rtl()) ? 'right' : 'left';
-
- if ( 4 > $columns )
- $size = 'full';
-
- $selector = "gallery-{$instance}";
- $size_class = sanitize_html_class( $size );
- $output = "<ul id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class} thumbnails'>";
-
- $i = 0;
- foreach ( $attachments as $id => $attachment ) {
- $comments = get_comments( array(
- 'post_id' => $id,
- 'count' => true,
- 'type' => 'comment',
- 'status' => 'approve'
- ) );
-
- $link = wp_get_attachment_link( $id, $size, ! ( isset( $attr['link'] ) AND 'file' == $attr['link'] ) );
- $clear_class = ( 0 == $i++ % $columns ) ? ' clear' : '';
- $span = 'span' . floor( 8 / $columns );
-
- $output .= "<li class='{$span}{$clear_class}'><{$itemtag} class='gallery-item'>";
- $output .= "<{$icontag} class='gallery-icon'>{$link}</{$icontag}>\n";
-
- if ( $captiontag AND ( 0 < $comments OR trim( $attachment->post_excerpt ) ) ) {
- $comments = ( 0 < $comments ) ? sprintf( _n('%d comment', '%d comments', $comments, 'the-bootstrap'), $comments ) : '';
- $excerpt = wptexturize( $attachment->post_excerpt );
- $out = ($comments AND $excerpt) ? " $excerpt <br /> $comments " : " $excerpt$comments ";
- $output .= "<{$captiontag} class='wp-caption-text gallery-caption'>{$out}</{$captiontag}>\n";
- }
- $output .= "</{$itemtag}></li>\n";
- }
- $output .= "</ul>\n";
-
- return $output;
- }
- add_filter( 'post_gallery', 'the_bootstrap_post_gallery', 10, 2 );
-
-
- /**
- * HTML 5 caption for pictures
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $empty
- * @param array $attr
- * @param string $content
- *
- * @return string
- */
- function the_bootstrap_img_caption_shortcode( $empty, $attr, $content ) {
-
- extract( shortcode_atts( array(
- 'id' => '',
- 'align' => 'alignnone',
- 'width' => '',
- 'caption' => ''
- ), $attr ) );
-
- if ( 1 > (int) $width OR empty( $caption ) ) {
- return $content;
- }
-
- if ( $id ) {
- $id = 'id="' . $id . '" ';
- }
-
- return '<figure ' . $id . 'class="wp-caption thumbnail ' . $align . '" style="width: '.$width.'px;">
- ' . do_shortcode( str_replace( 'class="thumbnail', 'class="', $content ) ) . '
- <figcaption class="wp-caption-text">' . $caption . '</figcaption>
- </figure>';
- }
- add_filter( 'img_caption_shortcode', 'the_bootstrap_img_caption_shortcode', 10, 3 );
-
-
- /**
- * Returns a password form which dispalys nicely with Bootstrap
- *
- * @author Konstantin Obenland
- * @since 1.0.0 - 05.02.2012
- *
- * @param string $form
- *
- * @return string The Bootstrap password form
- */
- function the_bootstrap_the_password_form( $form ) {
- return '<form class="post-password-form form-horizontal" action="' . home_url( 'wp-pass.php' ) . '" method="post"><legend>'. __( 'This post is password protected. To view it please enter your password below:', 'the-bootstrap' ) . '</legend><div class="control-group"><label class="control-label" for="post-password-' . get_the_ID() . '">' . __( 'Password:', 'the-bootstrap' ) .'</label><div class="controls"><input name="post_password" id="post-password-' . get_the_ID() . '" type="password" size="20" /></div></div><div class="form-actions"><button type="submit" class="post-password-submit submit btn btn-primary">' . __( 'Submit', 'the-bootstrap' ) . '</button></div></form>';
- }
- add_filter( 'the_password_form', 'the_bootstrap_the_password_form' );
-
-
- /**
- * Modifies the category dropdown args for widgets on 404 pages
- *
- * @author Konstantin Obenland
- * @since 1.5.0 - 19.05.2012
- *
- * @param array $args
- *
- * @return array
- */
- function the_bootstrap_widget_categories_dropdown_args( $args ) {
- if ( is_404() ) {
- $args = wp_parse_args( $args, array(
- 'orderby' => 'count',
- 'order' => 'DESC',
- 'show_count' => 1,
- 'title_li' => '',
- 'number' => 10
- ) );
- }
- return $args;
- }
- add_filter( 'widget_categories_dropdown_args', 'the_bootstrap_widget_categories_dropdown_args' );
-
-
- /**
- * Adds the .thumbnail class when images are sent to editor
- *
- * @author Konstantin Obenland
- * @since 2.0.0 - 29.08.2012
- *
- * @param string $html
- * @param int $id
- * @param string $caption
- * @param string $title
- * @param string $align
- * @param string $url
- * @param string $size
- * @param string $alt
- *
- * @return string Image HTML
- */
- function the_bootstrap_image_send_to_editor( $html, $id, $caption, $title, $align, $url, $size, $alt ) {
- if ( $url ) {
- $html = str_replace( '<a ', '<a class="thumbnail" ', $html );
- } else {
- $html = str_replace( 'class="', 'class="thumbnail ', $html );
- }
-
- return $html;
- }
- add_filter( 'image_send_to_editor', 'the_bootstrap_image_send_to_editor', 10, 8 );
-
-
- /**
- * Adjusts content_width value for full-width and single image attachment
- * templates, and when there are no active widgets in the sidebar.
- *
- * @author WordPress.org
- * @since 2.0.0 - 29.08.2012
- *
- * @return void
- */
- function the_bootstrap_content_width() {
- if ( is_attachment() ) {
- global $content_width;
- $content_width = 940;
- }
- }
- add_action( 'template_redirect', 'the_bootstrap_content_width' );
-
-
- /**
- * Returns the Theme version string
- *
- * @author Konstantin Obenland
- * @since 1.2.4 - 07.04.2012
- * @access private
- *
- * @return string The Bootstrap version
- */
- function _the_bootstrap_version() {
-
- if ( function_exists( 'wp_get_theme' ) ) {
- $theme_version = wp_get_theme()->get( 'Version' );
- }
- else {
- $theme_data = get_theme_data( get_template_directory() . '/style.css' );
- $theme_version = $theme_data['Version'];
- }
-
- return $theme_version;
- }
-
-
- /* End of file functions.php */
- /* Location: ./wp-content/themes/the-bootstrap/functions.php */