', "\n"; } } function roots_rel_canonical() { if (!is_singular()) { return; } global $wp_the_query; if (!$id = $wp_the_query->get_queried_object_id()) { return; } $link = get_permalink($id); echo "\t\n"; } // remove CSS from recent comments widget function roots_remove_recent_comments_style() { global $wp_widget_factory; if (isset($wp_widget_factory->widgets['WP_Widget_Recent_Comments'])) { remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style')); } } // remove CSS from gallery function roots_gallery_style($css) { return preg_replace("!!s", '', $css); } function roots_head_cleanup() { // http://wpengineer.com/1438/wordpress-header/ remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'index_rel_link'); remove_action('wp_head', 'parent_post_rel_link', 10, 0); remove_action('wp_head', 'start_post_rel_link', 10, 0); remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0); remove_action('wp_head', 'noindex', 1); add_action('wp_head', 'roots_noindex'); add_action('wp_head', 'roots_remove_recent_comments_style', 1); add_filter('gallery_style', 'roots_gallery_style'); if (!class_exists('WPSEO_Frontend')) { remove_action('wp_head', 'rel_canonical'); add_action('wp_head', 'roots_rel_canonical'); } // deregister l10n.js (new since WordPress 3.1) // why you might want to keep it: http://wordpress.stackexchange.com/questions/5451/what-does-l10n-js-do-in-wordpress-3-1-and-how-do-i-remove-it/5484#5484 // don't load jQuery through WordPress since it's linked in header.php if (!is_admin()) { wp_deregister_script('l10n'); wp_deregister_script('jquery'); wp_register_script('jquery', '', '', '', true); } } add_action('init', 'roots_head_cleanup'); // cleanup gallery_shortcode() function roots_gallery_shortcode($attr) { global $post, $wp_locale; static $instance = 0; $instance++; // Allow plugins/themes to override the default gallery template. $output = apply_filters('post_gallery', '', $attr); if ($output != '') { return $output; } // 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, 'icontag' => 'li', 'captiontag' => 'p', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ('RAND' == $order) { $orderby = 'none'; } if (!empty($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 (!empty($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; } $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = $gallery_div = ''; if (apply_filters('use_default_gallery_style', true)) { $gallery_style = ""; } $size_class = sanitize_html_class($size); $gallery_div = "\n"; return $output; } remove_shortcode('gallery'); add_shortcode('gallery', 'roots_gallery_shortcode'); function roots_attachment_link_class($html) { $postid = get_the_ID(); $html = str_replace(' '', 'align' => 'alignnone', 'width' => '', 'caption' => '' ); /* Merge the defaults with user input. */ $attr = shortcode_atts($defaults, $attr); /* If the width is less than 1 or there is no caption, return the content wrapped between the [caption]< tags. */ if (1 > $attr['width'] || empty($attr['caption'])) { return $content; } /* Set up the attributes for the caption
. */ $attributes = (!empty($attr['id']) ? ' id="' . esc_attr($attr['id']) . '"' : '' ); $attributes .= ' class="thumbnail wp-caption ' . esc_attr($attr['align']) . '"'; $attributes .= ' style="width: ' . esc_attr($attr['width']) . 'px"'; /* Open the caption
. */ $output = ''; /* Allow shortcodes for the content the caption was created for. */ $output .= do_shortcode($content); /* Append the caption text. */ $output .= '

' . $attr['caption'] . '

'; /* Close the caption
. */ $output .= '
'; /* Return the formatted, clean caption. */ return $output; } add_filter('img_caption_shortcode', 'roots_caption', 10, 3); // http://www.deluxeblogtips.com/2011/01/remove-dashboard-widgets-in-wordpress.html function roots_remove_dashboard_widgets() { remove_meta_box('dashboard_incoming_links', 'dashboard', 'normal'); remove_meta_box('dashboard_plugins', 'dashboard', 'normal'); remove_meta_box('dashboard_primary', 'dashboard', 'normal'); remove_meta_box('dashboard_secondary', 'dashboard', 'normal'); } add_action('admin_init', 'roots_remove_dashboard_widgets'); // excerpt cleanup function roots_excerpt_length($length) { return POST_EXCERPT_LENGTH; } function roots_excerpt_more($more) { return ' … ' . __( 'Continued', 'roots' ) . ''; } add_filter('excerpt_length', 'roots_excerpt_length'); add_filter('excerpt_more', 'roots_excerpt_more'); class Roots_Nav_Walker extends Walker_Nav_Menu { function check_current($val) { return preg_match('/(current-)/', $val); } function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ($depth) ? str_repeat("\t", $depth) : ''; $slug = sanitize_title($item->title); $class_names = $value = ''; $classes = empty($item->classes) ? array() : (array) $item->classes; $classes = array_filter($classes, array(&$this, 'check_current')); $class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item)); $class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : ''; $id = apply_filters('nav_menu_item_id', 'menu-' . $slug, $item, $args); $id = strlen($id) ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . ''; $attributes = ! empty($item->attr_title) ? ' title="' . esc_attr($item->attr_title) .'"' : ''; $attributes .= ! empty($item->target) ? ' target="' . esc_attr($item->target ) .'"' : ''; $attributes .= ! empty($item->xfn) ? ' rel="' . esc_attr($item->xfn ) .'"' : ''; $attributes .= ! empty($item->url) ? ' href="' . esc_attr($item->url ) .'"' : ''; $item_output = $args->before; $item_output .= ''; $item_output .= $args->link_before . apply_filters('the_title', $item->title, $item->ID) . $args->link_after; $item_output .= ''; $item_output .= $args->after; $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); } } class Roots_Navbar_Nav_Walker extends Walker_Nav_Menu { function check_current($val) { return preg_match('/(current-)|active|dropdown/', $val); } function start_lvl(&$output, $depth) { $output .= "\n
    \n"; } function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ($depth) ? str_repeat("\t", $depth) : ''; $slug = sanitize_title($item->title); $li_attributes = ''; $class_names = $value = ''; $classes = empty($item->classes) ? array() : (array) $item->classes; if ($args->has_children) { $classes[] = 'dropdown'; $li_attributes .= 'data-dropdown="dropdown"'; } $classes[] = ($item->current) ? 'active' : ''; $classes = array_filter($classes, array(&$this, 'check_current')); $class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item)); $class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : ''; $id = apply_filters('nav_menu_item_id', 'menu-' . $slug, $item, $args); $id = strlen($id) ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . ''; $attributes = ! empty($item->attr_title) ? ' title="' . esc_attr($item->attr_title) .'"' : ''; $attributes .= ! empty($item->target) ? ' target="' . esc_attr($item->target ) .'"' : ''; $attributes .= ! empty($item->xfn) ? ' rel="' . esc_attr($item->xfn ) .'"' : ''; $attributes .= ! empty($item->url) ? ' href="' . esc_attr($item->url ) .'"' : ''; $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-toggle="dropdown"' : ''; $item_output = $args->before; $item_output .= ''; $item_output .= $args->link_before . apply_filters('the_title', $item->title, $item->ID) . $args->link_after; $item_output .= ($args->has_children) ? ' ' : ''; $item_output .= ''; $item_output .= $args->after; $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); } function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output) { if (!$element) { return; } $id_field = $this->db_fields['id']; // display this element if (is_array($args[0])) { $args[0]['has_children'] = !empty($children_elements[$element->$id_field]); } elseif (is_object($args[0])) { $args[0]->has_children = !empty($children_elements[$element->$id_field]); } $cb_args = array_merge(array(&$output, $element, $depth), $args); call_user_func_array(array(&$this, 'start_el'), $cb_args); $id = $element->$id_field; // descend only when the depth is right and there are childrens for this element if (($max_depth == 0 || $max_depth > $depth+1) && isset($children_elements[$id])) { foreach ($children_elements[$id] as $child) { if (!isset($newlevel)) { $newlevel = true; // start the child delimiter $cb_args = array_merge(array(&$output, $depth), $args); call_user_func_array(array(&$this, 'start_lvl'), $cb_args); } $this->display_element($child, $children_elements, $max_depth, $depth + 1, $args, $output); } unset($children_elements[$id]); } if (isset($newlevel) && $newlevel) { // end the child delimiter $cb_args = array_merge(array(&$output, $depth), $args); call_user_func_array(array(&$this, 'end_lvl'), $cb_args); } // end this element $cb_args = array_merge(array(&$output, $element, $depth), $args); call_user_func_array(array(&$this, 'end_el'), $cb_args); } } function roots_nav_menu_args($args = '') { $args['container'] = false; $args['depth'] = 2; $args['items_wrap'] = ''; if (!$args['walker']) { $args['walker'] = new Roots_Nav_Walker(); } return $args; } add_filter('wp_nav_menu_args', 'roots_nav_menu_args'); // we don't need to self-close these tags in html5: // , function roots_remove_self_closing_tags($input) { return str_replace(' />', '>', $input); } add_filter('get_avatar', 'roots_remove_self_closing_tags'); add_filter('comment_id_fields', 'roots_remove_self_closing_tags'); add_filter('post_thumbnail_html', 'roots_remove_self_closing_tags'); // check to see if the tagline is set to default // show an admin notice to update if it hasn't been changed // you want to change this or remove it because it's used as the description in the RSS feed function roots_notice_tagline() { global $current_user; $user_id = $current_user->ID; if (!get_user_meta($user_id, 'ignore_tagline_notice')) { echo '
    '; echo '

    ', sprintf(__('Please update your site tagline Hide Notice', 'roots'), admin_url('options-general.php'), '?tagline_notice_ignore=0'), '

    '; echo '
    '; } } if ((get_option('blogdescription') === 'Just another WordPress site') && isset($_GET['page']) != 'theme_activation_options') { add_action('admin_notices', 'roots_notice_tagline'); } function roots_notice_tagline_ignore() { global $current_user; $user_id = $current_user->ID; if (isset($_GET['tagline_notice_ignore']) && '0' == $_GET['tagline_notice_ignore']) { add_user_meta($user_id, 'ignore_tagline_notice', 'true', true); } } add_action('admin_init', 'roots_notice_tagline_ignore'); // set the post revisions to 5 unless the constant // was set in wp-config.php to avoid DB bloat if (!defined('WP_POST_REVISIONS')) { define('WP_POST_REVISIONS', 5); } // allow more tags in TinyMCE including