File: /home/muoapartman/www/wp-content/themes/omega/lib/functions/extras.php
<?php
/**
* Custom functions that act independently of the theme templates
*
* Eventually, some of the functionality here could be replaced by core features
*
* @package Omega
*/
/**
* Add "first" and "last" CSS classes to dynamic sidebar widgets. Also adds numeric index class for each widget (widget-1, widget-2, etc.)
*
* @since Omega 9.0
*/
function omega_widget_classes($params) {
global $my_widget_num; // Global a counter array
$this_id = $params[0]['id']; // Get the id for the current sidebar we're processing
$arr_registered_widgets = wp_get_sidebars_widgets(); // Get an array of ALL registered widgets
if(!$my_widget_num) {// If the counter array doesn't exist, create it
$my_widget_num = array();
}
if(!isset($arr_registered_widgets[$this_id]) || !is_array($arr_registered_widgets[$this_id])) { // Check if the current sidebar has no widgets
return $params; // No widgets in this sidebar... bail early.
}
if(isset($my_widget_num[$this_id])) { // See if the counter array has an entry for this sidebar
$my_widget_num[$this_id] ++;
} else { // If not, create it starting with 1
$my_widget_num[$this_id] = 1;
}
$oddeven = $my_widget_num[$this_id] % 2 ? 'even' : 'odd';
$class = 'class="widget widget-' . $my_widget_num[$this_id] . ' ' . $oddeven . ' '; // Add a widget number class for additional styling options
if($my_widget_num[$this_id] == 1) { // If this is the first widget
$class .= 'widget-first ';
} elseif($my_widget_num[$this_id] == count($arr_registered_widgets[$this_id])) { // If this is the last widget
$class .= 'widget-last ';
}
$params[0]['before_widget'] = str_replace('class="widget ', $class, $params[0]['before_widget']); // Insert our new classes into "before widget"
return $params;
}
add_filter('dynamic_sidebar_params','omega_widget_classes');
/**
* Add the First and Last Class to WordPress Navigation Menu Items
*
* @since Omega 1.0
*/
function omega_first_and_last_menu_class($items) {
$items[1]->classes[] = 'first';
$items[count($items)]->classes[] = 'last';
return $items;
}
add_filter('wp_nav_menu_objects', 'omega_first_and_last_menu_class');
/**
* Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link.
*/
function omega_page_menu_args( $args ) {
$args['show_home'] = true;
return $args;
}
add_filter( 'wp_page_menu_args', 'omega_page_menu_args' );
/**
* Adds custom classes to the array of body classes.
*/
function omega_body_classes( $classes ) {
// Adds a class of group-blog to blogs with more than 1 published author
if ( is_multi_author() ) {
$classes[] = 'group-blog';
}
return $classes;
}
add_filter( 'body_class', 'omega_body_classes' );
/**
* Display page list when no menu is assigned (based on wp_list_pages function by wordpress team)
*
* @since 0.0.1
*
* @param array|string $args
* @return string html menu
*/
function omega_default_menu( $args = array() ) {
$defaults = array('sort_column' => 'menu_order, post_title', 'menu_class' => 'menu', 'echo' => true, 'link_before' => '', 'link_after' => '');
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( 'omega_default_menu_args', $args );
$menu = '';
$list_args = $args;
// Show Home in the menu
if ( ! empty($args['show_home']) ) {
if ( true === $args['show_home'] || '1' === $args['show_home'] || 1 === $args['show_home'] )
$text = __('Home', 'omega');
else
$text = $args['show_home'];
$class = '';
if ( is_front_page() && !is_paged() )
$class = 'class="current_page_item"';
$menu .= '<li ' . $class . '><a href="' . home_url( '/' ) . '" title="' . esc_attr($text) . '">' . $args['link_before'] . $text . $args['link_after'] . '</a></li>';
// If the front page is a page, add it to the exclude list
if (get_option('show_on_front') == 'page') {
if ( !empty( $list_args['exclude'] ) ) {
$list_args['exclude'] .= ',';
} else {
$list_args['exclude'] = '';
}
$list_args['exclude'] .= get_option('page_on_front');
}
}
$list_args['echo'] = false;
$list_args['title_li'] = '';
$menu .= str_replace( array( "\r", "\n", "\t" ), '', wp_list_pages($list_args) );
if ( $menu )
$menu = '<ul class="' . esc_attr($args['menu_class']) . '">' . $menu . '</ul>';
$menu = apply_filters( 'omega_default_menu', $menu, $args );
if ( $args['echo'] )
echo $menu;
else
return $menu;
}
/**
* Return a phrase shortened in length to a maximum number of characters.
*
* Result will be truncated at the last white space in the original string. In this function the word separator is a
* single space. Other white space characters (like newlines and tabs) are ignored.
*
* If the first `$max_characters` of the string does not contain a space character, an empty string will be returned.
*
* @since 1.4.0
*
* @param string $text A string to be shortened.
* @param integer $max_characters The maximum number of characters to return.
*
* @return string Truncated string
*/
function omega_truncate_phrase( $text, $max_characters ) {
$text = trim( $text );
if ( mb_strlen( $text ) > $max_characters ) {
//* Truncate $text to $max_characters + 1
$text = mb_substr( $text, 0, $max_characters + 1 );
//* Truncate to the last space in the truncated string
$text = trim( mb_substr( $text, 0, mb_strrpos( $text, ' ' ) ) );
}
return $text;
}
/**
* Return content stripped down and limited content.
*
* Strips out tags and shortcodes, limits the output to `$max_char` characters, and appends an ellipsis and more link to the end.
*
* @since 0.1.0
*
* @param integer $max_characters The maximum number of characters to return.
* @param string $more_link_text Optional. Text of the more link. Default is "(more...)".
* @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.
*
* @return string Limited content.
*/
function get_the_content_limit( $max_characters, $more_link_text = '(more...)', $stripteaser = false ) {
$content = get_the_content( '', $stripteaser );
//* Strip tags and shortcodes so the content truncation count is done correctly
$content = strip_tags( strip_shortcodes( $content ), apply_filters( 'get_the_content_limit_allowedtags', '<script>,<style>' ) );
//* Remove inline styles / scripts
$content = trim( preg_replace( '#<(s(cript|tyle)).*?</\1>#si', '', $content ) );
//* Truncate $content to $max_char
if ($max_characters < strlen( $content )) {
$content = omega_truncate_phrase( $content, $max_characters );
$no_more = false;
} else {
$no_more = true;
}
//* More link?
if ( $more_link_text && !$no_more ) {
$link = apply_filters( 'get_the_content_more_link', sprintf( '<span class="more"><a class="more-link" href="%s">%s</a></span>', get_permalink(), $more_link_text ), $more_link_text );
$output = sprintf( '<p>%s %s</p>', $content, $link );
} else {
$output = sprintf( '<p>%s</p>', $content );
$link = '';
}
return apply_filters( 'get_the_content_limit', $output, $content, $link, $max_characters );
}
/**
* Echo the limited content.
*
* @since 0.1.0
*
* @uses get_the_content_limit() Return content stripped down and limited content.
*
* @param integer $max_characters The maximum number of characters to return.
* @param string $more_link_text Optional. Text of the more link. Default is "(more...)".
* @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.
*/
function the_content_limit( $max_characters, $more_link_text = '(more...)', $stripteaser = false ) {
$content = get_the_content_limit( $max_characters, $more_link_text, $stripteaser );
echo apply_filters( 'the_content_limit', $content );
}
if ( !get_theme_mod( 'more_scroll', 1 )) {
add_filter( 'the_content_more_link', 'omega_remove_more_link_scroll' );
}
function omega_remove_more_link_scroll( $link ) {
$link = preg_replace( '|#more-[0-9]+|', '', $link );
return $link;
}