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; // For the front page, if set is_home() ? $c[] = 'blog' : null; // For the blog posts page, 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(); } elseif (is_author()) { $author = $wp_query->get_queried_object(); $c[] = 'author'; $c[] = 'author-' . $author->user_nicename; } elseif (is_category()) { $cat = $wp_query->get_queried_object(); $c[] = 'category'; $c[] = 'category-' . $cat->slug; } elseif (is_tag()) { $tags = $wp_query->get_queried_object(); $c[] = 'tag'; $c[] = 'tag-' . $tags->slug; } 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; } if (is_page_template()) { // Hat tip to Ian, themeshaper.com $c[] = 'page-template page-template-' . str_replace('.php', '-php', get_post_meta($pageID, '_wp_page_template', true)); } rewind_posts(); } elseif (is_search()) { the_post(); if (have_posts()) { $c[] = 'search-results'; } else { $c[] = 'search-no-results'; } rewind_posts(); } // 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; } } $thePostID = $wp_query->post->ID; $hero_type = get_post_meta($thePostID, 'hero_type_value', true); $layout = get_post_meta($thePostID, 'page_layout_value', true); if ($layout) { $c[] = 'layout layout_' . $layout; } if ($hero_type) { $c[] = 'hero hero_' . $hero_type; } // start http://www.nathanrice.net/blog/browser-detection-and-the-body_class-function/ global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone; if ($is_lynx) { $c[] = 'lynx'; } elseif ($is_gecko) { $c[] = 'gecko'; } elseif ($is_opera) { $c[] = 'opera'; } elseif ($is_NS4) { $c[] = 'ns4'; } elseif ($is_safari) { $c[] = 'safari'; } elseif ($is_chrome) { $c[] = 'chrome'; } elseif ($is_IE) { $c[] = 'ie'; } else { $c[] = 'unknown'; } //if($is_iphone) $c[] = 'iphone'; // end http://www.nathanrice.net/blog/browser-detection-and-the-body_class-function/ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false) { $c[] = 'ie6'; } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') == false) { $c[] = 'not-ie6'; } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') == false) { $c[] = 'not-ie'; } $uagent_obj = new uagent_info(); //Detect methods return 1 for true, 0 for false $isIphone = $uagent_obj->DetectIphone(); $isIpod = $uagent_obj->DetectIpod(); $isIpad = $uagent_obj->DetectIpad(); $isAndroid = $uagent_obj->DetectAndroid(); $isTierIphone = $uagent_obj->DetectTierIphone(); if ($isIphone == 1) { $c[] = 'iphone'; } else { if ($isIpod == 1) { $c[] = 'iphone ipod'; } else { if ($isIpad == 1) { $c[] = 'iphone ipad'; } else { if ($isAndroid == 1) { $c[] = 'android'; } } } } if ($isTierIphone == 1) { $c[] = 'tierIphone'; } // For when a visitor is logged in while browsing if ($current_user->ID) { $c[] = 'loggedin'; } if (function_exists('ashford_set_theme_style')) { if ($_GET["color"] != '') { $c[] = 'theme-style-' . $_GET["color"]; } else { $c[] = ashford_set_theme_style(); } } // Separates classes with a single space, collates classes for BODY $c = join(' ', apply_filters('body_class', $c)); // Available filter: body_class // And tada! return $print ? print $c : $c; }