File: /home/mmickelson/tfgarchive/wpblogtest1.old/wp-content/themes/ub_swiss/functions.php
<?php
// Produces a list of pages in the header without whitespace -- er, I mean negative space.
function sandbox_globalnav() {
echo '<div id="menu"><ul>';
$menu = wp_list_pages('title_li=&sort_column=menu_order&echo=0'); // Params for the page list in header.php
echo str_replace( array( "\r", "\n", "\t" ), '', $menu );
echo "</ul></div>\n";
}
// Generates semantic classes for BODY element
function sandbox_body_class( $print = true ) {
global $wp_query, $current_user;
// It's surely a WordPress blog, right?
$c = array('wordpress');
// Applies the time- and date-based classes (below) to BODY element
sandbox_date_classes( time(), $c );
// Generic semantic classes for what type of content is displayed
is_front_page() ? $c[] = 'home' : null; // New 'front' class for WP 2.5
is_home() ? $c[] = 'blog' : null; // Class for the posts, if set
is_archive() ? $c[] = 'archive' : null;
is_date() ? $c[] = 'date' : null;
is_search() ? $c[] = 'search' : null;
is_paged() ? $c[] = 'paged' : null;
is_attachment() ? $c[] = 'attachment' : null;
is_404() ? $c[] = 'four04' : null; // CSS does not allow a digit as first character
// Special classes for BODY element when a single post
if ( is_single() ) {
$postID = $wp_query->post->ID;
the_post();
// Adds 'single' class and class with the post ID
$c[] = 'single postid-' . $postID;
// Adds classes for the month, day, and hour when the post was published
if ( isset( $wp_query->post->post_date ) )
sandbox_date_classes( mysql2date( 'U', $wp_query->post->post_date ), $c, 's-' );
// Adds category classes for each category on single posts
if ( $cats = get_the_category() )
foreach ( $cats as $cat )
$c[] = 's-category-' . $cat->slug;
// Adds tag classes for each tags on single posts
if ( $tags = get_the_tags() )
foreach ( $tags as $tag )
$c[] = 's-tag-' . $tag->slug;
// Adds MIME-specific classes for attachments
if ( is_attachment() ) {
$mime_type = get_post_mime_type();
$mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' );
$c[] = 'attachmentid-' . $postID . ' attachment-' . str_replace( $mime_prefix, "", "$mime_type" );
}
// Adds author class for the post author
$c[] = 's-author-' . sanitize_title_with_dashes(strtolower(get_the_author_login()));
rewind_posts();
}
// Author name classes for BODY on author archives
elseif ( is_author() ) {
$author = $wp_query->get_queried_object();
$c[] = 'author';
$c[] = 'author-' . $author->user_nicename;
}
// Category name classes for BODY on category archvies
elseif ( is_category() ) {
$cat = $wp_query->get_queried_object();
$c[] = 'category';
$c[] = 'category-' . $cat->slug;
}
// Tag name classes for BODY on tag archives
elseif ( is_tag() ) {
$tags = $wp_query->get_queried_object();
$c[] = 'tag';
$c[] = 'tag-' . $tags->slug;
}
// Page author for BODY on 'pages'
elseif ( is_page() ) {
$pageID = $wp_query->post->ID;
$page_children = wp_list_pages("child_of=$pageID&echo=0");
the_post();
$c[] = 'page pageid-' . $pageID;
$c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author('login')));
// Checks to see if the page has children and/or is a child page; props to Adam
if ( $page_children != '' )
$c[] = 'page-parent';
if ( $wp_query->post->post_parent )
$c[] = 'page-child parent-pageid-' . $wp_query->post->post_parent;
rewind_posts();
}
// For when a visitor is logged in while browsing
if ( $current_user->ID )
$c[] = 'loggedin';
// Paged classes; for 'page X' classes of index, single, etc.
if ( ( ( $page = $wp_query->get('paged') ) || ( $page = $wp_query->get('page') ) ) && $page > 1 ) {
$c[] = 'paged-' . $page;
if ( is_single() ) {
$c[] = 'single-paged-' . $page;
} elseif ( is_page() ) {
$c[] = 'page-paged-' . $page;
} elseif ( is_category() ) {
$c[] = 'category-paged-' . $page;
} elseif ( is_tag() ) {
$c[] = 'tag-paged-' . $page;
} elseif ( is_date() ) {
$c[] = 'date-paged-' . $page;
} elseif ( is_author() ) {
$c[] = 'author-paged-' . $page;
} elseif ( is_search() ) {
$c[] = 'search-paged-' . $page;
}
}
// Separates classes with a single space, collates classes for BODY
$c = join( ' ', apply_filters( 'body_class', $c ) );
// And tada!
return $print ? print($c) : $c;
}
// Generates semantic classes for each post DIV element
function sandbox_post_class( $print = true ) {
global $post, $sandbox_post_alt;
// hentry for hAtom compliace, gets 'alt' for every other post DIV, describes the post type and p[n]
$c = array( 'hentry', "p$sandbox_post_alt", $post->post_type, $post->post_status );
// Author for the post queried
$c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author('login')));
// Category for the post queried
foreach ( (array) get_the_category() as $cat )
$c[] = 'category-' . $cat->slug;
// Tags for the post queried; if not tagged, use .untagged
if ( get_the_tags() == null ) {
$c[] = 'untagged';
} else {
foreach ( (array) get_the_tags() as $tag )
$c[] = 'tag-' . $tag->slug;
}
// For password-protected posts
if ( $post->post_password )
$c[] = 'protected';
// Applies the time- and date-based classes (below) to post DIV
sandbox_date_classes( mysql2date( 'U', $post->post_date ), $c );
// If it's the other to the every, then add 'alt' class
if ( ++$sandbox_post_alt % 2 )
$c[] = 'alt';
// Separates classes with a single space, collates classes for post DIV
$c = join( ' ', apply_filters( 'post_class', $c ) );
// And tada!
return $print ? print($c) : $c;
}
// Define the num val for 'alt' classes (in post DIV and comment LI)
$sandbox_post_alt = 1;
// Generates semantic classes for each comment LI element
function sandbox_comment_class( $print = true ) {
global $comment, $post, $sandbox_comment_alt;
// Collects the comment type (comment, trackback),
$c = array( $comment->comment_type );
// Counts trackbacks (t[n]) or comments (c[n])
if ( $comment->comment_type == 'comment' ) {
$c[] = "c$sandbox_comment_alt";
} else {
$c[] = "t$sandbox_comment_alt";
}
// If the comment author has an id (registered), then print the log in name
if ( $comment->user_id > 0 ) {
$user = get_userdata($comment->user_id);
// For all registered users, 'byuser'; to specificy the registered user, 'commentauthor+[log in name]'
$c[] = 'byuser comment-author-' . sanitize_title_with_dashes(strtolower( $user->user_login ));
// For comment authors who are the author of the post
if ( $comment->user_id === $post->post_author )
$c[] = 'bypostauthor';
}
// If it's the other to the every, then add 'alt' class; collects time- and date-based classes
sandbox_date_classes( mysql2date( 'U', $comment->comment_date ), $c, 'c-' );
if ( ++$sandbox_comment_alt % 2 )
$c[] = 'alt';
// Separates classes with a single space, collates classes for comment LI
$c = join( ' ', apply_filters( 'comment_class', $c ) );
// Tada again!
return $print ? print($c) : $c;
}
// Generates time- and date-based classes for BODY, post DIVs, and comment LIs; relative to GMT (UTC)
function sandbox_date_classes( $t, &$c, $p = '' ) {
$t = $t + ( get_option('gmt_offset') * 3600 );
$c[] = $p . 'y' . gmdate( 'Y', $t ); // Year
$c[] = $p . 'm' . gmdate( 'm', $t ); // Month
$c[] = $p . 'd' . gmdate( 'd', $t ); // Day
$c[] = $p . 'h' . gmdate( 'H', $t ); // Hour
}
// For category lists on category archives: Returns other categories except the current one (redundant)
function sandbox_cats_meow($glue) {
$current_cat = single_cat_title( '', false );
$separator = "\n";
$cats = explode( $separator, get_the_category_list($separator) );
foreach ( $cats as $i => $str ) {
if ( strstr( $str, ">$current_cat<" ) ) {
unset($cats[$i]);
break;
}
}
if ( empty($cats) )
return false;
return trim(join( $glue, $cats ));
}
// For tag lists on tag archives: Returns other tags except the current one (redundant)
function sandbox_tag_ur_it($glue) {
$current_tag = single_tag_title( '', '', false );
$separator = "\n";
$tags = explode( $separator, get_the_tag_list( "", "$separator", "" ) );
foreach ( $tags as $i => $str ) {
if ( strstr( $str, ">$current_tag<" ) ) {
unset($tags[$i]);
break;
}
}
if ( empty($tags) )
return false;
return trim(join( $glue, $tags ));
}
// Produces an avatar image with the hCard-compliant photo class
function sandbox_commenter_link() {
$commenter = get_comment_author_link();
if ( ereg( '<a[^>]* class=[^>]+>', $commenter ) ) {
$commenter = ereg_replace( '(<a[^>]* class=[\'"]?)', '\\1url ' , $commenter );
} else {
$commenter = ereg_replace( '(<a )/', '\\1class="url "' , $commenter );
}
$email = get_comment_author_email();
$avatar = str_replace( "class='avatar", "class='photo avatar", get_avatar( "$email", "32" ) );
echo $avatar . ' <span class="fn n">' . $commenter . '</span>';
}
// Sandbox gallery short code; styles used in style.css file
function sandbox_gallery($attr) {
global $post;
// Sets our defaults for the Sandbox gallery short code
extract( shortcode_atts(
array(
'orderby' => 'menu_order ASC, ID ASC',
'id' => $post->ID,
'itemtag' => 'dl',
'icontag' => 'dt',
'captiontag' => 'dd',
'columns' => 3,
'size' => 'thumbnail',
),
$attr ) );
$id = intval($id);
$orderby = addslashes($orderby);
$attachments = get_children("post_parent=$id&post_type=attachment&post_mime_type=image&orderby=\"{$orderby}\"");
// If we have nothing, show nothing
if ( empty($attachments) )
return '';
// Shows simple image links when viewed in a feed
if ( is_feed() ) {
$output = "\n";
foreach ( $attachments as $id => $attachment )
$output .= wp_get_attachment_link( $id, $size, true ) . "\n";
return $output;
}
$listtag = tag_escape($listtag);
$itemtag = tag_escape($itemtag);
$captiontag = tag_escape($captiontag);
$columns = intval($columns);
// Divides number of columns for even widths
$itemwidth = $columns > 0 ? floor(100/$columns) : 100;
// Let's begin our gallery
$output = apply_filters( "gallery_style", "<div class='gallery gallery-set-1'>" );
// We're using pretty much the same code from ../wp-includes/media.php
foreach ( $attachments as $id => $attachment ) {
$link = wp_get_attachment_link( $id, $size, true );
// This is our 'wrapper' for each gallery item
$output .= "<{$itemtag} class='gallery-item' style='width:{$itemwidth}%;'>";
// And now we have the actual image link
$output .= "<{$icontag} class='gallery-icon'>$link</{$icontag}>";
// Next, show the image caption if present
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "<{$captiontag} class='gallery-caption'>{$attachment->post_excerpt}</{$captiontag}>";
}
// Close the gallery item 'wrapper'
$output .= "</{$itemtag}>";
// Start a new gallery set for our 'columns'
if ( $columns > 0 && ++$i % $columns == 0 ) {
$gallery_count = 2;
$output .= "\n</div>\n<div class='gallery gallery-set-" . $gallery_count . "'>\n";
$gallery_count++;
}
}
// Ends our gallery
$output .= "</div>\n";
// And spits out the chewed up code
return $output;
}
// Widget: Search; to match the Sandbox style and replace Widget plugin default
function widget_sandbox_search($args) {
extract($args);
$options = get_option('widget_sandbox_search');
$title = empty($options['title']) ? __( 'Search', 'sandbox' ) : $options['title'];
$button = empty($options['button']) ? __( 'Find', 'sandbox' ) : $options['button'];
?>
<?php echo $before_widget ?>
<?php echo $before_title ?><label for="s"><?php echo $title ?></label><?php echo $after_title ?>
<form id="searchform" method="get" action="<?php bloginfo('home') ?>">
<div>
<input id="s" class="text-input" name="s" type="text" value="<?php the_search_query() ?>" size="10" tabindex="1" accesskey="S" />
<input id="searchsubmit" class="submit-button" name="searchsubmit" type="submit" value="<?php echo $button ?>" tabindex="2" />
</div>
</form>
<?php echo $after_widget ?>
<?php
}
// Widget: Search; element controls for customizing text within Widget plugin
function widget_sandbox_search_control() {
$options = $newoptions = get_option('widget_sandbox_search');
if ( $_POST['search-submit'] ) {
$newoptions['title'] = strip_tags( stripslashes( $_POST['search-title'] ) );
$newoptions['button'] = strip_tags( stripslashes( $_POST['search-button'] ) );
}
if ( $options != $newoptions ) {
$options = $newoptions;
update_option( 'widget_sandbox_search', $options );
}
$title = attribute_escape( $options['title'] );
$button = attribute_escape( $options['button'] );
?>
<p><label for="search-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="search-title" name="search-title" type="text" value="<?php echo $title; ?>" /></label></p>
<p><label for="search-button"><?php _e( 'Button Text:', 'sandbox' ) ?> <input class="widefat" id="search-button" name="search-button" type="text" value="<?php echo $button; ?>" /></label></p>
<input type="hidden" id="search-submit" name="search-submit" value="1" />
<?php
}
// Widget: Meta; to match the Sandbox style and replace Widget plugin default
function widget_sandbox_meta($args) {
extract($args);
$options = get_option('widget_meta');
$title = empty($options['title']) ? __( 'Meta', 'sandbox' ) : $options['title'];
?>
<?php echo $before_widget; ?>
<?php echo $before_title . $title . $after_title; ?>
<ul>
<?php wp_register() ?>
<li><?php wp_loginout() ?></li>
<?php wp_meta() ?>
</ul>
<?php echo $after_widget; ?>
<?php
}
// Widget: RSS links; to match the Sandbox style
function widget_sandbox_rsslinks($args) {
extract($args);
$options = get_option('widget_sandbox_rsslinks');
$title = empty($options['title']) ? __( 'RSS Links', 'sandbox' ) : $options['title'];
?>
<?php echo $before_widget; ?>
<?php echo $before_title . $title . $after_title; ?>
<ul>
<li><a href="<?php bloginfo('rss2_url') ?>" title="<?php echo wp_specialchars( get_bloginfo('name'), 1 ) ?> <?php _e( 'Posts RSS feed', 'sandbox' ); ?>" rel="alternate" type="application/rss+xml"><?php _e( 'All posts', 'sandbox' ) ?></a></li>
<li><a href="<?php bloginfo('comments_rss2_url') ?>" title="<?php echo wp_specialchars(bloginfo('name'), 1) ?> <?php _e( 'Comments RSS feed', 'sandbox' ); ?>" rel="alternate" type="application/rss+xml"><?php _e( 'All comments', 'sandbox' ) ?></a></li>
</ul>
<?php echo $after_widget; ?>
<?php
}
// Widget: RSS links; element controls for customizing text within Widget plugin
function widget_sandbox_rsslinks_control() {
$options = $newoptions = get_option('widget_sandbox_rsslinks');
if ( $_POST['rsslinks-submit'] ) {
$newoptions['title'] = strip_tags( stripslashes( $_POST['rsslinks-title'] ) );
}
if ( $options != $newoptions ) {
$options = $newoptions;
update_option( 'widget_sandbox_rsslinks', $options );
}
$title = attribute_escape( $options['title'] );
?>
<p><label for="rsslinks-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="rsslinks-title" name="rsslinks-title" type="text" value="<?php echo $title; ?>" /></label></p>
<input type="hidden" id="rsslinks-submit" name="rsslinks-submit" value="1" />
<?php
}
// Widgets plugin: intializes the plugin after the widgets above have passed snuff
function sandbox_widgets_init() {
if ( !function_exists('register_sidebars') )
return;
// Formats the Sandbox widgets, adding readability-improving whitespace
$p = array(
'before_widget' => "\n\t\t\t" . '<li id="%1$s" class="widget %2$s">',
'after_widget' => "\n\t\t\t</li>\n",
'before_title' => "\n\t\t\t\t". '<h3 class="widgettitle">',
'after_title' => "</h3>\n"
);
// Table for how many? Two? This way, please.
register_sidebars( 2, $p );
// Finished intializing Widgets plugin, now let's load the Sandbox default widgets; first, Sandbox search widget
$widget_ops = array(
'classname' => 'widget_search',
'description' => __( "A search form for your blog (Sandbox)", "sandbox" )
);
wp_register_sidebar_widget( 'search', __( 'Search', 'sandbox' ), 'widget_sandbox_search', $widget_ops );
unregister_widget_control('search');
wp_register_widget_control( 'search', __( 'Search', 'sandbox' ), 'widget_sandbox_search_control' );
// Sandbox Meta widget
$widget_ops = array(
'classname' => 'widget_meta',
'description' => __( "Log in/out and administration links (Sandbox)", "sandbox" )
);
wp_register_sidebar_widget( 'meta', __( 'Meta', 'sandbox' ), 'widget_sandbox_meta', $widget_ops );
unregister_widget_control('meta');
wp_register_widget_control( 'meta', __('Meta'), 'wp_widget_meta_control' );
//Sandbox RSS Links widget
$widget_ops = array(
'classname' => 'widget_rss_links',
'description' => __( "RSS links for both posts and comments <small>(Sandbox)</small>", "sandbox" )
);
wp_register_sidebar_widget( 'rss_links', __( 'RSS Links', 'sandbox' ), 'widget_sandbox_rsslinks', $widget_ops );
wp_register_widget_control( 'rss_links', __( 'RSS Links', 'sandbox' ), 'widget_sandbox_rsslinks_control' );
}
// Translate, if applicable
load_theme_textdomain('sandbox');
// Runs our code at the end to check that everything needed has loaded
add_action( 'init', 'sandbox_widgets_init' );
// Add Sandbox function to gallery short code
add_shortcode( 'gallery', 'sandbox_gallery' );
// Adds filters so that things run smoothly
add_filter( 'archive_meta', 'wptexturize' );
add_filter( 'archive_meta', 'convert_smilies' );
add_filter( 'archive_meta', 'convert_chars' );
add_filter( 'archive_meta', 'wpautop' );
// Remember: the Sandbox is for play.
?>