web/wp-content/themes/thematic/library/extensions/dynamic-classes.php
author ymh <ymh.work@gmail.com>
Mon, 22 Mar 2010 16:36:28 +0100
changeset 5 ac511f1ccc8e
parent 1 0d28b7c10758
permissions -rw-r--r--
add hgignore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
// Generates semantic classes for BODY element
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
function thematic_body_class( $print = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
	global $wp_query, $current_user;
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
    
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
    $c = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
	if (apply_filters('thematic_show_bc_wordpress', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
        // It's surely a WordPress blog, right?
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
        $c = array('wordpress');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
	if (apply_filters('thematic_show_bc_datetime', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
        // Applies the time- and date-based classes (below) to BODY element
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
        thematic_date_classes( time(), $c );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
    if (apply_filters('thematic_show_bc_contenttype', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
        // Generic semantic classes for what type of content is displayed
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
        is_front_page()  ? $c[] = 'home'       : null; // For the front page, if set
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
        is_home()        ? $c[] = 'blog'       : null; // For the blog posts page, if set
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
        is_archive()     ? $c[] = 'archive'    : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
        is_date()        ? $c[] = 'date'       : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
        is_search()      ? $c[] = 'search'     : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
        is_paged()       ? $c[] = 'paged'      : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
        is_attachment()  ? $c[] = 'attachment' : null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
        is_404()         ? $c[] = 'four04'     : null; // CSS does not allow a digit as first character
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
    if (apply_filters('thematic_show_bc_singular', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
        // Special classes for BODY element when a singular post
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
        if ( is_singular() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
            $c[] = 'singular';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
            $c[] = 'not-singular';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
	// Special classes for BODY element when a single post
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
	if ( is_single() && apply_filters('thematic_show_bc_singlepost', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
		$postID = $wp_query->post->ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
		the_post();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
        // Adds post slug class, prefixed by 'slug-'
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
        $c[] = 'slug-' . $wp_query->post->post_name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
		// Adds 'single' class and class with the post ID
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
		$c[] = 'single postid-' . $postID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
		// Adds classes for the month, day, and hour when the post was published
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
		if ( isset( $wp_query->post->post_date ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
			thematic_date_classes( mysql2date( 'U', $wp_query->post->post_date ), $c, 's-' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
		// Adds category classes for each category on single posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
		if ( $cats = get_the_category() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
			foreach ( $cats as $cat )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
				$c[] = 's-category-' . $cat->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
		// Adds tag classes for each tags on single posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
		if ( $tags = get_the_tags() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
			foreach ( $tags as $tag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
				$c[] = 's-tag-' . $tag->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
		// Adds MIME-specific classes for attachments
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
		if ( is_attachment() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
			$mime_type = get_post_mime_type();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
			$mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
				$c[] = 'attachmentid-' . $postID . ' attachment-' . str_replace( $mime_prefix, "", "$mime_type" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
		// Adds author class for the post author
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
		$c[] = 's-author-' . sanitize_title_with_dashes(strtolower(get_the_author_meta('user_nicename', $post->post_author)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
		rewind_posts();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
		// For posts with excerpts
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
		if (has_excerpt())
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
			$c[] = 's-has-excerpt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
		// For posts with comments open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
		if (comments_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
			$c[] = 's-comments-open';		
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
			$c[] = 's-comments-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
		// For posts with pings open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
		if (pings_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
			$c[] = 's-pings-open';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
			$c[] = 's-pings-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
		// For password-protected posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
		if ( $post->post_password )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
			$c[] = 's-protected';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
		// For sticky posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
		if (is_sticky())
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
		   $c[] = 's-sticky';		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
	// Author name classes for BODY on author archives
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
	elseif ( is_author() && apply_filters('thematic_show_bc_authorarchives', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
		$author = $wp_query->get_queried_object();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
		$c[] = 'author';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
		$c[] = 'author-' . $author->user_nicename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
	// Category name classes for BODY on category archvies
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
	elseif ( is_category() && apply_filters('thematic_show_bc_categoryarchives', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
		$cat = $wp_query->get_queried_object();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
		$c[] = 'category';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
		$c[] = 'category-' . $cat->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
	// Tag name classes for BODY on tag archives
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
	elseif ( is_tag() && apply_filters('thematic_show_bc_tagarchives', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
		$tags = $wp_query->get_queried_object();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
		$c[] = 'tag';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
		$c[] = 'tag-' . $tags->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
	// Page author for BODY on 'pages'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
	elseif ( is_page() && apply_filters('thematic_show_bc_pages', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
		$pageID = $wp_query->post->ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
		$page_children = wp_list_pages("child_of=$pageID&echo=0");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
		the_post();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
        // Adds post slug class, prefixed by 'slug-'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
        $c[] = 'slug-' . $wp_query->post->post_name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
		$c[] = 'page pageid-' . $pageID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
		$c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author_meta('user_nicename', $post->post_author)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
		// Checks to see if the page has children and/or is a child page; props to Adam
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
		if ( $page_children )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
			$c[] = 'page-parent';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
		if ( $wp_query->post->post_parent )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
			$c[] = 'page-child parent-pageid-' . $wp_query->post->post_parent;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
		// For pages with excerpts
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
		if (has_excerpt())
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
			$c[] = 'page-has-excerpt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
		// For pages with comments open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
		if (comments_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
			$c[] = 'page-comments-open';		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
			$c[] = 'page-comments-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
		// For pages with pings open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
		if (pings_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
			$c[] = 'page-pings-open';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
			$c[] = 'page-pings-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
		// For password-protected pages
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
		if ( $post->post_password )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
			$c[] = 'page-protected';			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
		// Checks to see if the page is using a template	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
		if ( is_page_template() & !is_page_template('default') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
			$c[] = 'page-template page-template-' . str_replace( '.php', '-php', get_post_meta( $pageID, '_wp_page_template', true ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
		rewind_posts();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
	// Search classes for results or no results
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
	elseif ( is_search() && apply_filters('thematic_show_bc_search', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
		the_post();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
		if ( $wp_query->found_posts > 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
			$c[] = 'search-results';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
			$c[] = 'search-no-results';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
		rewind_posts();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
	if (apply_filters('thematic_show_bc_loggedin', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
        // For when a visitor is logged in while browsing
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
        if ( $current_user->ID )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
            $c[] = 'loggedin';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
	// Paged classes; for 'page X' classes of index, single, etc.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
	if ( (( ( $page = $wp_query->get('paged') ) || ( $page = $wp_query->get('page') ) ) && $page > 1) && apply_filters('thematic_show_bc_pagex', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
	// Thanks to Prentiss Riddle, twitter.com/pzriddle, for the security fix below. 
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
 			$page = intval($page); // Ensures that an integer (not some dangerous script) is passed for the variable
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
		$c[] = 'paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
		if ( is_single() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
			$c[] = 'single-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
		} elseif ( is_page() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
			$c[] = 'page-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
		} elseif ( is_category() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
			$c[] = 'category-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
		} elseif ( is_tag() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
			$c[] = 'tag-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
		} elseif ( is_date() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
			$c[] = 'date-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
		} elseif ( is_author() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
			$c[] = 'author-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
		} elseif ( is_search() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
			$c[] = 'search-paged-' . $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
	if (apply_filters('thematic_show_bc_browser', TRUE)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
        // A little Browser detection shall we?
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
        $browser = $_SERVER[ 'HTTP_USER_AGENT' ];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
        // Mac, PC ...or Linux
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
        if ( preg_match( "/Mac/", $browser ) ){
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
			$c[] = 'mac';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
        } elseif ( preg_match( "/Windows/", $browser ) ){
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
			$c[] = 'windows';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
        } elseif ( preg_match( "/Linux/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
			$c[] = 'linux';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
			$c[] = 'unknown-os';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
        // Checks browsers in this order: Chrome, Safari, Opera, MSIE, FF
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
        if ( preg_match( "/Chrome/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
			$c[] = 'chrome';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
			preg_match( "/Chrome\/(\d.\d)/si", $browser, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
			$ch_version = 'ch' . str_replace( '.', '-', $matches[1] );      
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
			$c[] = $ch_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
        } elseif ( preg_match( "/Safari/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
			$c[] = 'safari';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
			preg_match( "/Version\/(\d.\d)/si", $browser, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
			$sf_version = 'sf' . str_replace( '.', '-', $matches[1] );      
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
			$c[] = $sf_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
        } elseif ( preg_match( "/Opera/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
			$c[] = 'opera';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
			preg_match( "/Opera\/(\d.\d)/si", $browser, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
			$op_version = 'op' . str_replace( '.', '-', $matches[1] );      
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
			$c[] = $op_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
        } elseif ( preg_match( "/MSIE/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
			$c[] = 'msie';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
			if( preg_match( "/MSIE 6.0/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
					$c[] = 'ie6';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
			} elseif ( preg_match( "/MSIE 7.0/", $browser ) ){
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
					$c[] = 'ie7';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
			} elseif ( preg_match( "/MSIE 8.0/", $browser ) ){
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
					$c[] = 'ie8';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
        } elseif ( preg_match( "/Firefox/", $browser ) && preg_match( "/Gecko/", $browser ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
			$c[] = 'firefox';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
			preg_match( "/Firefox\/(\d)/si", $browser, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
			$ff_version = 'ff' . str_replace( '.', '-', $matches[1] );      
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
			$c[] = $ff_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
			$c[] = 'unknown-browser';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
	// Separates classes with a single space, collates classes for BODY
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
	$c = join( ' ', apply_filters( 'body_class',  $c ) ); // Available filter: body_class
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
	// And tada!
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
	return $print ? print($c) : $c;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
// Generates semantic classes for each post DIV element
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
function thematic_post_class( $print = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
	global $post, $thematic_post_alt;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
	// hentry for hAtom compliace, gets 'alt' for every other post DIV, describes the post type and p[n]
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
	$c = array( 'hentry', "p$thematic_post_alt", $post->post_type, $post->post_status );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
	// Author for the post queried
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
	$c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author('login')));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
	// Category for the post queried
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
	foreach ( (array) get_the_category() as $cat )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
		$c[] = 'category-' . $cat->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
	// Tags for the post queried; if not tagged, use .untagged
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
	if ( get_the_tags() == null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
		$c[] = 'untagged';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
		foreach ( (array) get_the_tags() as $tag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
			$c[] = 'tag-' . $tag->slug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
	// For posts with excerpts
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
	if (has_excerpt())
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
		$c[] = 'has-excerpt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
	// For posts with comments open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
	if (comments_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
		$c[] = 'comments-open';		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
		$c[] = 'comments-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
	// For posts with pings open or closed
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
	if (pings_open()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
		$c[] = 'pings-open';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
		$c[] = 'pings-closed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
	// For password-protected posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
	if ( $post->post_password )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
		$c[] = 'protected';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
	// For sticky posts
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
	if (is_sticky())
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
	   $c[] = 'sticky';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
	// Applies the time- and date-based classes (below) to post DIV
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
	thematic_date_classes( mysql2date( 'U', $post->post_date ), $c );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
	// If it's the other to the every, then add 'alt' class
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
	if ( ++$thematic_post_alt % 2 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
		$c[] = 'alt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
    // Adds post slug class, prefixed by 'slug-'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
    $c[] = 'slug-' . $post->post_name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
	// Separates classes with a single space, collates classes for post DIV
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
	$c = join( ' ', apply_filters( 'post_class', $c ) ); // Available filter: post_class
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
	// And tada!
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
	return $print ? print($c) : $c;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
// Define the num val for 'alt' classes (in post DIV and comment LI)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
$thematic_post_alt = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
// Generates semantic classes for each comment LI element
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
function thematic_comment_class( $print = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
	global $comment, $post, $thematic_comment_alt, $comment_depth, $comment_thread_alt;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
	// Collects the comment type (comment, trackback),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
	$c = array( $comment->comment_type );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
	// Counts trackbacks (t[n]) or comments (c[n])
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
	if ( $comment->comment_type == 'comment' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
		$c[] = "c$thematic_comment_alt";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
		$c[] = "t$thematic_comment_alt";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
	// If the comment author has an id (registered), then print the log in name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
	if ( $comment->user_id > 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
		$user = get_userdata($comment->user_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
		// For all registered users, 'byuser'; to specificy the registered user, 'commentauthor+[log in name]'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
		$c[] = 'byuser comment-author-' . sanitize_title_with_dashes(strtolower( $user->user_login ));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
		// For comment authors who are the author of the post
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
		if ( $comment->user_id === $post->post_author )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
			$c[] = 'bypostauthor';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
	// If it's the other to the every, then add 'alt' class; collects time- and date-based classes
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
	thematic_date_classes( mysql2date( 'U', $comment->comment_date ), $c, 'c-' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
	if ( ++$thematic_comment_alt % 2 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
		$c[] = 'alt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
	// Comment depth
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
	$c[] = "depth-$comment_depth";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
	// Separates classes with a single space, collates classes for comment LI
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
	$c = join( ' ', apply_filters( 'comment_class', $c ) ); // Available filter: comment_class
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
	// Tada again!
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
	return $print ? print($c) : $c;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
// Generates time- and date-based classes for BODY, post DIVs, and comment LIs; relative to GMT (UTC)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
function thematic_date_classes( $t, &$c, $p = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
	$t = $t + ( get_option('gmt_offset') * 3600 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
	$c[] = $p . 'y' . gmdate( 'Y', $t ); // Year
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
	$c[] = $p . 'm' . gmdate( 'm', $t ); // Month
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
	$c[] = $p . 'd' . gmdate( 'd', $t ); // Day
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
	$c[] = $p . 'h' . gmdate( 'H', $t ); // Hour
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
// Remember: Thematic, like The Sandbox, is for play.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
?>