wp/wp-includes/category-template.php
author ymh <ymh.work@gmail.com>
Wed, 13 Nov 2013 17:59:35 +0000
changeset 3 6d22aaa62d12
parent 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
correct portofolio item display
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Category Template Tags and API.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * @subpackage Template
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * Retrieve category link URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * @see get_term_link()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @param int|object $category Category ID or object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @return string Link on success, empty string if category does not exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
function get_category_link( $category ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	if ( ! is_object( $category ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		$category = (int) $category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
	$category = get_term_link( $category, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	if ( is_wp_error( $category ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	return $category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * Retrieve category parents with separator.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * @since 1.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * @param int $id Category ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 * @param bool $link Optional, default is false. Whether to format with link.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * @param string $separator Optional, default is '/'. How to separate categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 * @param bool $nicename Optional, default is false. Whether to use nice name for display.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @param array $visited Optional. Already linked to categories to prevent duplicates.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @return string|WP_Error A list of category parents on success, WP_Error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	$chain = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
	$parent = get_term( $id, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
	if ( is_wp_error( $parent ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		return $parent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	if ( $nicename )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		$name = $parent->slug;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		$name = $parent->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
	if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		$visited[] = $parent->parent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		$chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	if ( $link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		$chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		$chain .= $name.$separator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	return $chain;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
 * Retrieve post categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
 * @uses $post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
 * @param int $id Optional, default to current post ID. The post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
function get_the_category( $id = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	$categories = get_the_terms( $id, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
	if ( ! $categories || is_wp_error( $categories ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
		$categories = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
	$categories = array_values( $categories );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	foreach ( array_keys( $categories ) as $key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
		_make_cat_compat( $categories[$key] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	// Filter name is plural because we return alot of categories (possibly more than #13237) not just one
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
	return apply_filters( 'get_the_categories', $categories );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
 * Sort categories by name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
 * Used by usort() as a callback, should not be used directly. Can actually be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
 * used to sort any term object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
 * @param object $a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
 * @param object $b
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
 * @return int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
function _usort_terms_by_name( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	return strcmp( $a->name, $b->name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
 * Sort categories by ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
 * Used by usort() as a callback, should not be used directly. Can actually be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
 * used to sort any term object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
 * @param object $a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
 * @param object $b
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
 * @return int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
function _usort_terms_by_ID( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
	if ( $a->term_id > $b->term_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	elseif ( $a->term_id < $b->term_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
 * Retrieve category name based on category ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
 * @param int $cat_ID Category ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
 * @return string|WP_Error Category name on success, WP_Error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
function get_the_category_by_ID( $cat_ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
	$cat_ID = (int) $cat_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	$category = get_term( $cat_ID, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
	if ( is_wp_error( $category ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		return $category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	return $category->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
 * Retrieve category list in either HTML list or custom format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
 * @since 1.5.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
 * @param string $separator Optional, default is empty string. Separator for between the categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
 * @param string $parents Optional. How to display the parents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
 * @param int $post_id Optional. Post ID to retrieve categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
function get_the_category_list( $separator = '', $parents='', $post_id = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
	global $wp_rewrite;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
	if ( ! is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
		return apply_filters( 'the_category', '', $separator, $parents );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
	$categories = get_the_category( $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
	if ( empty( $categories ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
	$rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	$thelist = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
	if ( '' == $separator ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
		$thelist .= '<ul class="post-categories">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		foreach ( $categories as $category ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			$thelist .= "\n\t<li>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
			switch ( strtolower( $parents ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
				case 'multiple':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
					if ( $category->parent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
						$thelist .= get_category_parents( $category->parent, true, $separator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
				case 'single':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
					if ( $category->parent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
						$thelist .= get_category_parents( $category->parent, false, $separator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
					$thelist .= $category->name.'</a></li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
				case '':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
		$thelist .= '</ul>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		$i = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		foreach ( $categories as $category ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
			if ( 0 < $i )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
				$thelist .= $separator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
			switch ( strtolower( $parents ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				case 'multiple':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					if ( $category->parent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
						$thelist .= get_category_parents( $category->parent, true, $separator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
				case 'single':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					if ( $category->parent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
						$thelist .= get_category_parents( $category->parent, false, $separator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
					$thelist .= "$category->name</a>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
				case '':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
					$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			++$i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
	return apply_filters( 'the_category', $thelist, $separator, $parents );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
 * Check if the current post in within any of the given categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
 * The given categories are checked against the post's categories' term_ids, names and slugs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
 * Categories given as integers will only be checked against the post's categories' term_ids.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
 * Prior to v2.5 of WordPress, category names were not supported.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
 * Prior to v2.7, category slugs were not supported.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
 * Prior to v2.7, only one category could be compared: in_category( $single_category ).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
 * Prior to v2.7, this function could only be used in the WordPress Loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
 * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
 * @since 1.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
 * @uses has_category()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
 * @param int|string|array $category Category ID, name or slug, or array of said.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
 * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
 * @return bool True if the current post is in any of the given categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
function in_category( $category, $post = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
	if ( empty( $category ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
	return has_category( $category, $post );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
 * Display the category list for the post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
 * @param string $separator Optional, default is empty string. Separator for between the categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
 * @param string $parents Optional. How to display the parents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
 * @param int $post_id Optional. Post ID to retrieve categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
function the_category( $separator = '', $parents='', $post_id = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	echo get_the_category_list( $separator, $parents, $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
 * Retrieve category description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
 * @param int $category Optional. Category ID. Will use global category ID by default.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
 * @return string Category description, available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
function category_description( $category = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
	return term_description( $category, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
 * Display or retrieve the HTML dropdown list of categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
 * The list of arguments is below:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
 *     'show_option_all' (string) - Text to display for showing all categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
 *     'show_option_none' (string) - Text to display for showing no categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
 *     'orderby' (string) default is 'ID' - What column to use for ordering the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
 * categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
 *     'order' (string) default is 'ASC' - What direction to order categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
 *     'show_count' (bool|int) default is 0 - Whether to show how many posts are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
 * in the category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
 *     'hide_empty' (bool|int) default is 1 - Whether to hide categories that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
 * don't have any posts attached to them.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
 *     'child_of' (int) default is 0 - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
 *     'exclude' (string) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
 *     'echo' (bool|int) default is 1 - Whether to display or retrieve content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
 *     'depth' (int) - The max depth.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
 *     'tab_index' (int) - Tab index for select element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
 *     'name' (string) - The name attribute value for select element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
 *     'id' (string) - The ID attribute value for select element. Defaults to name if omitted.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
 *     'class' (string) - The class attribute value for select element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
 *     'selected' (int) - Which category ID is selected.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
 *     'taxonomy' (string) - The name of the taxonomy to retrieve. Defaults to category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
 * The 'hierarchical' argument, which is disabled by default, will override the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
 * depth argument, unless it is true. When the argument is false, it will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
 * display all of the categories. When it is enabled it will use the value in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
 * the 'depth' argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
 * @param string|array $args Optional. Override default arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
 * @return string HTML content only if 'echo' argument is 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
function wp_dropdown_categories( $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
	$defaults = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
		'show_option_all' => '', 'show_option_none' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		'orderby' => 'id', 'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
		'show_count' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
		'hide_empty' => 1, 'child_of' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
		'exclude' => '', 'echo' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		'selected' => 0, 'hierarchical' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		'name' => 'cat', 'id' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		'class' => 'postform', 'depth' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		'tab_index' => 0, 'taxonomy' => 'category',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
		'hide_if_empty' => false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	$defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	// Back compat.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
	if ( isset( $args['type'] ) && 'link' == $args['type'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		_deprecated_argument( __FUNCTION__, '3.0', '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		$args['taxonomy'] = 'link_category';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
	$r = wp_parse_args( $args, $defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
	if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
		$r['pad_counts'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
	extract( $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
	$tab_index_attribute = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
	if ( (int) $tab_index > 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
		$tab_index_attribute = " tabindex=\"$tab_index\"";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
	$categories = get_terms( $taxonomy, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
	$name = esc_attr( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
	$class = esc_attr( $class );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
	$id = $id ? esc_attr( $id ) : $name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	if ( ! $r['hide_if_empty'] || ! empty($categories) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		$output = "<select name='$name' id='$id' class='$class' $tab_index_attribute>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		$output = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
	if ( empty($categories) && ! $r['hide_if_empty'] && !empty($show_option_none) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
		$show_option_none = apply_filters( 'list_cats', $show_option_none );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		$output .= "\t<option value='-1' selected='selected'>$show_option_none</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
	if ( ! empty( $categories ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		if ( $show_option_all ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
			$show_option_all = apply_filters( 'list_cats', $show_option_all );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			$selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			$output .= "\t<option value='0'$selected>$show_option_all</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
		if ( $show_option_none ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			$show_option_none = apply_filters( 'list_cats', $show_option_none );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			$selected = ( '-1' === strval($r['selected']) ) ? " selected='selected'" : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			$output .= "\t<option value='-1'$selected>$show_option_none</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
		if ( $hierarchical )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			$depth = $r['depth'];  // Walk the full depth.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			$depth = -1; // Flat.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
		$output .= walk_category_dropdown_tree( $categories, $depth, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
	if ( ! $r['hide_if_empty'] || ! empty($categories) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		$output .= "</select>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
	$output = apply_filters( 'wp_dropdown_cats', $output );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
		echo $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
	return $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
 * Display or retrieve the HTML list of categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
 * The list of arguments is below:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
 *     'show_option_all' (string) - Text to display for showing all categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
 *     'orderby' (string) default is 'ID' - What column to use for ordering the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
 * categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
 *     'order' (string) default is 'ASC' - What direction to order categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
 *     'show_count' (bool|int) default is 0 - Whether to show how many posts are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
 * in the category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
 *     'hide_empty' (bool|int) default is 1 - Whether to hide categories that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
 * don't have any posts attached to them.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
 *     'use_desc_for_title' (bool|int) default is 1 - Whether to use the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
 * description instead of the category title.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
 *     'feed' - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
 *     'feed_type' - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
 *     'feed_image' - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
 *     'child_of' (int) default is 0 - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
 *     'exclude' (string) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
 *     'exclude_tree' (string) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
 *     'echo' (bool|int) default is 1 - Whether to display or retrieve content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
 *     'current_category' (int) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
 *     'hierarchical' (bool) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
 *     'title_li' (string) - See {@link get_categories()}.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
 *     'depth' (int) - The max depth.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
 * @param string|array $args Optional. Override default arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
 * @return string HTML content only if 'echo' argument is 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
function wp_list_categories( $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
	$defaults = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		'show_option_all' => '', 'show_option_none' => __('No categories'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
		'orderby' => 'name', 'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		'style' => 'list',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		'show_count' => 0, 'hide_empty' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
		'use_desc_for_title' => 1, 'child_of' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
		'feed' => '', 'feed_type' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
		'feed_image' => '', 'exclude' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		'exclude_tree' => '', 'current_category' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
		'hierarchical' => true, 'title_li' => __( 'Categories' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
		'echo' => 1, 'depth' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		'taxonomy' => 'category'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
	$r = wp_parse_args( $args, $defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
	if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
		$r['pad_counts'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
	if ( true == $r['hierarchical'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
		$r['exclude_tree'] = $r['exclude'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
		$r['exclude'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
	if ( !isset( $r['class'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
		$r['class'] = ( 'category' == $r['taxonomy'] ) ? 'categories' : $r['taxonomy'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
	extract( $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
	if ( !taxonomy_exists($taxonomy) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
	$categories = get_categories( $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
	$output = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
	if ( $title_li && 'list' == $style )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			$output = '<li class="' . esc_attr( $class ) . '">' . $title_li . '<ul>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
	if ( empty( $categories ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
		if ( ! empty( $show_option_none ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			if ( 'list' == $style )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
				$output .= '<li>' . $show_option_none . '</li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
				$output .= $show_option_none;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
		if ( ! empty( $show_option_all ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
			$posts_page = ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) ) ? get_permalink( get_option( 'page_for_posts' ) ) : home_url( '/' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
			$posts_page = esc_url( $posts_page );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
			if ( 'list' == $style )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
				$output .= "<li><a href='$posts_page'>$show_option_all</a></li>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
				$output .= "<a href='$posts_page'>$show_option_all</a>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
		if ( empty( $r['current_category'] ) && ( is_category() || is_tax() || is_tag() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			$current_term_object = get_queried_object();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
			if ( $current_term_object && $r['taxonomy'] === $current_term_object->taxonomy )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
				$r['current_category'] = get_queried_object_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		if ( $hierarchical )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			$depth = $r['depth'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
			$depth = -1; // Flat.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
		$output .= walk_category_tree( $categories, $depth, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
	if ( $title_li && 'list' == $style )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
		$output .= '</ul></li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
	$output = apply_filters( 'wp_list_categories', $output, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
		echo $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
		return $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
 * Display tag cloud.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
 * The text size is set by the 'smallest' and 'largest' arguments, which will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
 * use the 'unit' argument value for the CSS text size unit. The 'format'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
 * argument can be 'flat' (default), 'list', or 'array'. The flat value for the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
 * 'format' argument will separate tags with spaces. The list value for the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
 * 'format' argument will format the tags in a UL HTML list. The array value for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
 * the 'format' argument will return in PHP array type format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
 * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
 * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
 * The 'number' argument is how many tags to return. By default, the limit will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
 * be to return the top 45 tags in the tag cloud list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
 * The 'topic_count_text_callback' argument is a function, which, given the count
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
 * of the posts  with that tag, returns a text for the tooltip of the tag link.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
 * The 'exclude' and 'include' arguments are used for the {@link get_tags()}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
 * function. Only one should be used, because only one will be used and the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
 * other ignored, if they are both set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
 * @param array|string $args Optional. Override default arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
 * @return array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
function wp_tag_cloud( $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
	$defaults = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
		'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
		'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
	$args = wp_parse_args( $args, $defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
	$tags = get_terms( $args['taxonomy'], array_merge( $args, array( 'orderby' => 'count', 'order' => 'DESC' ) ) ); // Always query top tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
	if ( empty( $tags ) || is_wp_error( $tags ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
	foreach ( $tags as $key => $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
		if ( 'edit' == $args['link'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			$link = get_edit_tag_link( $tag->term_id, $tag->taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			$link = get_term_link( intval($tag->term_id), $tag->taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
		if ( is_wp_error( $link ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		$tags[ $key ]->link = $link;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		$tags[ $key ]->id = $tag->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
	$return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
	$return = apply_filters( 'wp_tag_cloud', $return, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
	if ( 'array' == $args['format'] || empty($args['echo']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
	echo $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
 * Default text for tooltip for tag links
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
 * @param integer $count number of posts with that tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
 * @return string text for the tooltip of a tag link.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
function default_topic_count_text( $count ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
	return sprintf( _n('%s topic', '%s topics', $count), number_format_i18n( $count ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
 * Default topic count scaling for tag links
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
 * @param integer $count number of posts with that tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
 * @return integer scaled count
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
function default_topic_count_scale( $count ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
	return round(log10($count + 1) * 100);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
 * Generates a tag cloud (heatmap) from provided data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
 * The text size is set by the 'smallest' and 'largest' arguments, which will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
 * use the 'unit' argument value for the CSS text size unit. The 'format'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
 * argument can be 'flat' (default), 'list', or 'array'. The flat value for the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
 * 'format' argument will separate tags with spaces. The list value for the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
 * 'format' argument will format the tags in a UL HTML list. The array value for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
 * the 'format' argument will return in PHP array type format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
 * The 'tag_cloud_sort' filter allows you to override the sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
 * Passed to the filter: $tags array and $args array, has to return the $tags array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
 * after sorting it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
 * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
 * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
 * 'RAND'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
 * The 'number' argument is how many tags to return. By default, the limit will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
 * be to return the entire tag cloud list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
 * The 'topic_count_text_callback' argument is a function, which given the count
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
 * of the posts  with that tag returns a text for the tooltip of the tag link.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
 * @todo Complete functionality.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
 * @param array $tags List of tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
 * @param string|array $args Optional, override default arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
function wp_generate_tag_cloud( $tags, $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
	$defaults = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
		'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
		'topic_count_text_callback' => 'default_topic_count_text',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
		'topic_count_scale_callback' => 'default_topic_count_scale', 'filter' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
	if ( !isset( $args['topic_count_text_callback'] ) && isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
		$body = 'return sprintf (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
			_n(' . var_export($args['single_text'], true) . ', ' . var_export($args['multiple_text'], true) . ', $count),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
			number_format_i18n( $count ));';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
		$args['topic_count_text_callback'] = create_function('$count', $body);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
	$args = wp_parse_args( $args, $defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
	extract( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
	if ( empty( $tags ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	$tags_sorted = apply_filters( 'tag_cloud_sort', $tags, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
	if ( $tags_sorted != $tags  ) { // the tags have been sorted by a plugin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
		$tags = $tags_sorted;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
		unset($tags_sorted);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
		if ( 'RAND' == $order ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			shuffle($tags);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
			// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
			if ( 'name' == $orderby )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
				uasort( $tags, '_wp_object_name_sort_cb' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
				uasort( $tags, '_wp_object_count_sort_cb' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
			if ( 'DESC' == $order )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
				$tags = array_reverse( $tags, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	if ( $number > 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		$tags = array_slice($tags, 0, $number);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
	$counts = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
	$real_counts = array(); // For the alt tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
	foreach ( (array) $tags as $key => $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
		$real_counts[ $key ] = $tag->count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
		$counts[ $key ] = $topic_count_scale_callback($tag->count);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
	$min_count = min( $counts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
	$spread = max( $counts ) - $min_count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
	if ( $spread <= 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
		$spread = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
	$font_spread = $largest - $smallest;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
	if ( $font_spread < 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
		$font_spread = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
	$font_step = $font_spread / $spread;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
	$a = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	foreach ( $tags as $key => $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
		$count = $counts[ $key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
		$real_count = $real_counts[ $key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
		$tag_link = '#' != $tag->link ? esc_url( $tag->link ) : '#';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
		$tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
		$tag_name = $tags[ $key ]->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
		$a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" . esc_attr( call_user_func( $topic_count_text_callback, $real_count, $tag, $args ) ) . "' style='font-size: " .
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			str_replace( ',', '.', ( $smallest + ( ( $count - $min_count ) * $font_step ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			. "$unit;'>$tag_name</a>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
	switch ( $format ) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
	case 'array' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		$return =& $a;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
	case 'list' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
		$return = "<ul class='wp-tag-cloud'>\n\t<li>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
		$return .= join( "</li>\n\t<li>", $a );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
		$return .= "</li>\n</ul>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
		break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
	default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
		$return = join( $separator, $a );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
	endswitch;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
	if ( $filter )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
		return apply_filters( 'wp_generate_tag_cloud', $return, $tags, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
 * Callback for comparing objects based on name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
function _wp_object_name_sort_cb( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
	return strnatcasecmp( $a->name, $b->name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
 * Callback for comparing objects based on count
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
function _wp_object_count_sort_cb( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
	return ( $a->count > $b->count );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
// Helper functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
 * Retrieve HTML list content for category list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
 * @uses Walker_Category to create HTML list content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
 * @see Walker_Category::walk() for parameters and return description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
function walk_category_tree() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
	$args = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	// the user's options are the third parameter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
	if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
		$walker = new Walker_Category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
		$walker = $args[2]['walker'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
	return call_user_func_array(array( &$walker, 'walk' ), $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
 * Retrieve HTML dropdown (select) content for category list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
 * @uses Walker_CategoryDropdown to create HTML dropdown content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
 * @see Walker_CategoryDropdown::walk() for parameters and return description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
function walk_category_dropdown_tree() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
	$args = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
	// the user's options are the third parameter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
	if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		$walker = new Walker_CategoryDropdown;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
		$walker = $args[2]['walker'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
	return call_user_func_array(array( &$walker, 'walk' ), $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
 * Create HTML list of categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
 * @uses Walker
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
class Walker_Category extends Walker {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
	 * What the class handles.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
	 * @see Walker::$tree_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
	var $tree_type = 'category';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
	 * Database fields to use.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
	 * @see Walker::$db_fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
	 * @todo Decouple this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	 * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
	var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
	 * Starts the list before the elements are added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
	 * @see Walker::start_lvl()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
	 * @param string $output Passed by reference. Used to append additional content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
	 * @param int    $depth  Depth of category. Used for tab indentation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
	 * @param array  $args   An array of arguments. Will only append content if style argument value is 'list'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
	 *                       @see wp_list_categories()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
	function start_lvl( &$output, $depth = 0, $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		if ( 'list' != $args['style'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
		$indent = str_repeat("\t", $depth);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
		$output .= "$indent<ul class='children'>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
	 * Ends the list of after the elements are added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
	 * @see Walker::end_lvl()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
	 * @param string $output Passed by reference. Used to append additional content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
	 * @param int    $depth  Depth of category. Used for tab indentation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
	 * @param array  $args   An array of arguments. Will only append content if style argument value is 'list'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
	 *                       @wsee wp_list_categories()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
	function end_lvl( &$output, $depth = 0, $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
		if ( 'list' != $args['style'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
		$indent = str_repeat("\t", $depth);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
		$output .= "$indent</ul>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
	 * Start the element output.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
	 * @see Walker::start_el()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
	 * @param string $output   Passed by reference. Used to append additional content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
	 * @param object $category Category data object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
	 * @param int    $depth    Depth of category in reference to parents. Default 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
	 * @param array  $args     An array of arguments. @see wp_list_categories()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
	 * @param int    $id       ID of the current category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
	function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
		extract($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
		$cat_name = esc_attr( $category->name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
		$cat_name = apply_filters( 'list_cats', $cat_name, $category );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
		$link = '<a href="' . esc_url( get_term_link($category) ) . '" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
		if ( $use_desc_for_title == 0 || empty($category->description) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
			$link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
			$link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		$link .= '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
		$link .= $cat_name . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
		if ( !empty($feed_image) || !empty($feed) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
			$link .= ' ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
			if ( empty($feed_image) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
				$link .= '(';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
			$link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			if ( empty($feed) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
				$alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
				$title = ' title="' . $feed . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
				$alt = ' alt="' . $feed . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
				$name = $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
				$link .= $title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
			$link .= '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
			if ( empty($feed_image) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
				$link .= $name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
				$link .= "<img src='$feed_image'$alt$title" . ' />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
			$link .= '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
			if ( empty($feed_image) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
				$link .= ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
		if ( !empty($show_count) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
			$link .= ' (' . intval($category->count) . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
		if ( 'list' == $args['style'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			$output .= "\t<li";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
			$class = 'cat-item cat-item-' . $category->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
			if ( !empty($current_category) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
				$_current_category = get_term( $current_category, $category->taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
				if ( $category->term_id == $current_category )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
					$class .=  ' current-cat';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
				elseif ( $category->term_id == $_current_category->parent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
					$class .=  ' current-cat-parent';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			$output .=  ' class="' . $class . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
			$output .= ">$link\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
			$output .= "\t$link<br />\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
	 * Ends the element output, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
	 * @see Walker::end_el()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
	 * @param string $output Passed by reference. Used to append additional content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
	 * @param object $page   Not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
	 * @param int    $depth  Depth of category. Not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
	 * @param array  $args   An array of arguments. Only uses 'list' for whether should append to output. @see wp_list_categories()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
	function end_el( &$output, $page, $depth = 0, $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
		if ( 'list' != $args['style'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
		$output .= "</li>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
 * Create HTML dropdown list of Categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
 * @uses Walker
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
class Walker_CategoryDropdown extends Walker {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
	 * @see Walker::$tree_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
	var $tree_type = 'category';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
	 * @see Walker::$db_fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
	 * @todo Decouple this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
	 * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
	var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
	 * Start the element output.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
	 * @see Walker::start_el()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
	 * @param string $output   Passed by reference. Used to append additional content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
	 * @param object $category Category data object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
	 * @param int    $depth    Depth of category. Used for padding.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
	 * @param array  $args     Uses 'selected' and 'show_count' keys, if they exist. @see wp_dropdown_categories()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
	function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
		$pad = str_repeat('&nbsp;', $depth * 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
		$cat_name = apply_filters('list_cats', $category->name, $category);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
		$output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\"";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
		if ( $category->term_id == $args['selected'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
			$output .= ' selected="selected"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
		$output .= '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
		$output .= $pad.$cat_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
		if ( $args['show_count'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
			$output .= '&nbsp;&nbsp;('. $category->count .')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
		$output .= "</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
// Tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
 * Retrieve the link to the tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
 * @see get_term_link()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
 * @param int|object $tag Tag ID or object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
 * @return string Link on success, empty string if tag does not exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
function get_tag_link( $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
	if ( ! is_object( $tag ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
		$tag = (int) $tag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
	$tag = get_term_link( $tag, 'post_tag' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
	if ( is_wp_error( $tag ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
		return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
	return $tag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
 * Retrieve the tags for a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
 * @uses apply_filters() Calls 'get_the_tags' filter on the list of post tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
 * @param int $id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
 * @return array|bool Array of tag objects on success, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
function get_the_tags( $id = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
	return apply_filters( 'get_the_tags', get_the_terms( $id, 'post_tag' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
 * Retrieve the tags for a post formatted as a string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
 * @uses apply_filters() Calls 'the_tags' filter on string list of tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
 * @param string $before Optional. Before tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
 * @param string $sep Optional. Between tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
 * @param string $after Optional. After tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
 * @param int $id Optional. Post ID. Defaults to the current post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
 * @return string|bool|WP_Error A list of tags on success, false or WP_Error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
function get_the_tag_list( $before = '', $sep = '', $after = '', $id = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
	return apply_filters( 'the_tags', get_the_term_list( $id, 'post_tag', $before, $sep, $after ), $before, $sep, $after, $id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
 * Retrieve the tags for a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
 * @param string $before Optional. Before list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
 * @param string $sep Optional. Separate items using this.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
 * @param string $after Optional. After list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
function the_tags( $before = null, $sep = ', ', $after = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
	if ( null === $before )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
		$before = __('Tags: ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
	echo get_the_tag_list($before, $sep, $after);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
 * Retrieve tag description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
 * @since 2.8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
 * @param int $tag Optional. Tag ID. Will use global tag ID by default.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
 * @return string Tag description, available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
function tag_description( $tag = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
	return term_description( $tag );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
 * Retrieve term description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
 * @since 2.8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
 * @param int $term Optional. Term ID. Will use global term ID by default.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
 * @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
 * @return string Term description, available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
function term_description( $term = 0, $taxonomy = 'post_tag' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
	if ( ! $term && ( is_tax() || is_tag() || is_category() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
		$term = get_queried_object();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
		if ( $term ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
			$taxonomy = $term->taxonomy;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
			$term = $term->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
	$description = get_term_field( 'description', $term, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
	return is_wp_error( $description ) ? '' : $description;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
 * Retrieve the terms of the taxonomy that are attached to the post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
 * @param int|object $post Post ID or object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
 * @param string $taxonomy Taxonomy name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
 * @return array|bool|WP_Error Array of term objects on success, false or WP_Error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
function get_the_terms( $post, $taxonomy ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
	if ( ! $post = get_post( $post ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
	$terms = get_object_term_cache( $post->ID, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
	if ( false === $terms ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
		$terms = wp_get_object_terms( $post->ID, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
		wp_cache_add($post->ID, $terms, $taxonomy . '_relationships');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
	$terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
	if ( empty( $terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
	return $terms;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
 * Retrieve a post's terms as a list with specified format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
 * @param int $id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
 * @param string $taxonomy Taxonomy name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
 * @param string $before Optional. Before list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
 * @param string $sep Optional. Separate items using this.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
 * @param string $after Optional. After list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
 * @return string|bool|WP_Error A list of terms on success, false or WP_Error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
	$terms = get_the_terms( $id, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
	if ( is_wp_error( $terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
		return $terms;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
	if ( empty( $terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
	foreach ( $terms as $term ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
		$link = get_term_link( $term, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
		if ( is_wp_error( $link ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
			return $link;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
		$term_links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
	$term_links = apply_filters( "term_links-$taxonomy", $term_links );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
	return $before . join( $sep, $term_links ) . $after;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
 * Display the terms in a list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
 * @param int $id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
 * @param string $taxonomy Taxonomy name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
 * @param string $before Optional. Before list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
 * @param string $sep Optional. Separate items using this.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
 * @param string $after Optional. After list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
 * @return null|bool False on WordPress error. Returns null when displaying.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
function the_terms( $id, $taxonomy, $before = '', $sep = ', ', $after = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
	$term_list = get_the_term_list( $id, $taxonomy, $before, $sep, $after );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
	if ( is_wp_error( $term_list ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
	echo apply_filters('the_terms', $term_list, $taxonomy, $before, $sep, $after);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
 * Check if the current post has any of given category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
 * @param string|int|array $category Optional. The category name/term_id/slug or array of them to check for.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
 * @param int|object $post Optional. Post to check instead of the current post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
 * @return bool True if the current post has any of the given categories (or any category, if no category specified).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
function has_category( $category = '', $post = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
	return has_term( $category, 'category', $post );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
 * Check if the current post has any of given tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
 * The given tags are checked against the post's tags' term_ids, names and slugs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
 * Tags given as integers will only be checked against the post's tags' term_ids.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
 * If no tags are given, determines if post has any tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
 * Prior to v2.7 of WordPress, tags given as integers would also be checked against the post's tags' names and slugs (in addition to term_ids)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
 * Prior to v2.7, this function could only be used in the WordPress Loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
 * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
 * @param string|int|array $tag Optional. The tag name/term_id/slug or array of them to check for.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
 * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
 * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
function has_tag( $tag = '', $post = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
	return has_term( $tag, 'post_tag', $post );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
 * Check if the current post has any of given terms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
 * The given terms are checked against the post's terms' term_ids, names and slugs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
 * Terms given as integers will only be checked against the post's terms' term_ids.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
 * If no terms are given, determines if post has any terms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
 * @param string|int|array $term Optional. The term name/term_id/slug or array of them to check for.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
 * @param string $taxonomy Taxonomy name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
 * @param int|object $post Optional. Post to check instead of the current post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
 * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
function has_term( $term = '', $taxonomy = '', $post = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
	$post = get_post($post);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
	if ( !$post )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
	$r = is_object_in_term( $post->ID, $taxonomy, $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
	if ( is_wp_error( $r ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
	return $r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
}