\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_home() ? $c[] = 'home' : null; 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() ) { $the_mime = get_post_mime_type(); $boring_stuff = array("application/", "image/", "text/", "audio/", "video/", "music/"); $c[] = 'attachment-' . str_replace($boring_stuff, "", "$the_mime"); } // 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 else if ( is_author() ) { $author = $wp_query->get_queried_object(); $c[] = 'author'; $c[] = 'author-' . $author->user_nicename; } // Category name classes for BODY on category archvies else if ( is_category() ) { $cat = $wp_query->get_queried_object(); $c[] = 'category'; $c[] = 'category-' . $cat->slug; } // Tag name classes for BODY on tag archives else if ( is_tag() ) { $tags = $wp_query->get_queried_object(); $c[] = 'tag'; $c[] = 'tag-' . $tags->slug; // Does not work; however I try to return the tag I get a false. Grrr. } // Page author for BODY on 'pages' else if ( is_page() ) { $pageID = $wp_query->post->ID; the_post(); $c[] = 'page pageid-' . $pageID; $c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author('login'))); 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 ) { $page = intval($page); $c[] = 'paged-'.$page.''; if ( is_single() ) { $c[] = 'single-paged-'.$page.''; } else if ( is_page() ) { $c[] = 'page-paged-'.$page.''; } else if ( is_category() ) { $c[] = 'category-paged-'.$page.''; } else if ( is_tag() ) { $c[] = 'tag-paged-'.$page.''; } else if ( is_date() ) { $c[] = 'date-paged-'.$page.''; } else if ( is_author() ) { $c[] = 'author-paged-'.$page.''; } else if ( is_search() ) { $c[] = 'search-paged-'.$page.''; } } // Separates classes with a single space, collates classes for BODY $c = implode(' ', 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; //gets 'alt' for every other post DIV, describes the post status $c = array("p$sandbox_post_alt", $post->post_status); // Author for the post queried $c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author('login'))); // 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 = implode(' ', get_post_class( $c, $post->ID ) ); // 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 == 'trackback') { $c[] = "t$sandbox_comment_alt"; } else { $c[] = "c$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 = implode( ' ', apply_filters( 'comment_class', $c, array(), $comment->comment_ID, $comment, $post ) ); // 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(implode($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"; $tag_list = get_the_tag_list( "", "$separator", "" ); if ( is_wp_error( $tag_list ) ) return false; $tags = explode( $separator, $tag_list ); foreach ( $tags as $i => $str ) { if ( strstr( $str, ">$current_tag<" ) ) { unset($tags[$i]); break; } } if ( empty($tags) ) return false; return trim(implode( $glue, $tags )); } // Widget: Search; to match the Sandbox style and replace Widget plugin default function widget_sandbox_search($args) { extract($args); if ( empty($title) ) $title = __('Search', 'sandbox'); ?>

"

", 'after_title' => "

\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 unregister_widget('WP_Widget_Search'); wp_register_sidebar_widget('search', __('Search', 'sandbox'), 'widget_sandbox_search', 'classname=search'); unregister_widget('WP_Widget_Meta'); wp_register_sidebar_widget('meta', __('Meta', 'sandbox'), 'widget_sandbox_meta', 'classname=meta'); wp_register_sidebar_widget('rss-links', __('RSS Links', 'sandbox'), 'widget_sandbox_rsslinks', 'classname=rss-links'); wp_register_widget_control('rss-links', __('RSS Links', 'sandbox'), 'widget_sandbox_rsslinks_control', 'height=90'); } // Translate, if applicable load_theme_textdomain('sandbox'); // Runs our code at the end to check that everything needed has loaded add_action('widgets_init', 'sandbox_widgets_init'); // 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. // wpcom custom function sandbox_theme_data($thing='Name', $default='') { static $theme_data = NULL; if ($theme_data === NULL) { $theme_data = get_theme_data(get_stylesheet_directory() . '/style.css'); } if (isset($theme_data[$thing])) return $theme_data[$thing]; return $default; } add_theme_support( 'automatic-feed-links' ); add_custom_background(); function sandbox_10_comment($comment, $args, $depth) { $GLOBALS['comment'] = $comment; extract($args, EXTR_SKIP); ?>
  • id="comment-">
    | Permalink', 'sandbox'), get_comment_date(), get_comment_time(), '#comment-' . get_comment_ID() ); edit_comment_link(__('Edit', 'sandbox'), ' | ', ''); ?>
    comment_approved == '0') _e("\t\t\t\t\tYour comment is awaiting moderation.\n", 'sandbox') ?>
    'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
  • id="comment-">
    | ', ''); ?>
    comment_approved == '0') _e('\t\t\t\t\tYour trackback is awaiting moderation.\n', 'sandbox') ?>

    Howdy! There's a new version of the Sandbox theme you’re using on this blog—now with the new custom menu feature. Check out Sandbox 1.6.2 in Appearance → Themes.