X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/3e7fab96d7874067884348df10bbdcdefa4a89ad..312084b5d95c21feb519ff03decf948420e1f6fa:/wp-includes/category-template.php
diff --git a/wp-includes/category-template.php b/wp-includes/category-template.php
index cd8dbcb1..7e378b44 100644
--- a/wp-includes/category-template.php
+++ b/wp-includes/category-template.php
@@ -1,52 +1,59 @@
parent == $id ) {
- $chain .= $before.$category->term_id.$after;
- $chain .= get_category_children($category->term_id, $before, $after);
- }
- }
- return $chain;
-}
-
-function get_category_link($category_id) {
+/**
+ * Category Template Tags and API.
+ *
+ * @package WordPress
+ * @subpackage Template
+ */
+
+/**
+ * Retrieve category link URL.
+ *
+ * @since 1.0.0
+ * @uses apply_filters() Calls 'category_link' filter on category link and category ID.
+ *
+ * @param int $category_id Category ID.
+ * @return string
+ */
+function get_category_link( $category_id ) {
global $wp_rewrite;
$catlink = $wp_rewrite->get_category_permastruct();
- if ( empty($catlink) ) {
- $file = get_option('home') . '/';
+ if ( empty( $catlink ) ) {
+ $file = get_option( 'home' ) . '/';
$catlink = $file . '?cat=' . $category_id;
} else {
- $category = &get_category($category_id);
+ $category = &get_category( $category_id );
if ( is_wp_error( $category ) )
return $category;
$category_nicename = $category->slug;
- if ( $parent = $category->parent )
- $category_nicename = get_category_parents($parent, false, '/', true) . $category_nicename;
+ if ( $category->parent == $category_id ) // recursive recursion
+ $category->parent = 0;
+ elseif ($category->parent != 0 )
+ $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
- $catlink = str_replace('%category%', $category_nicename, $catlink);
- $catlink = get_option('home') . user_trailingslashit($catlink, 'category');
+ $catlink = str_replace( '%category%', $category_nicename, $catlink );
+ $catlink = get_option( 'home' ) . user_trailingslashit( $catlink, 'category' );
}
- return apply_filters('category_link', $catlink, $category_id);
+ return apply_filters( 'category_link', $catlink, $category_id );
}
-function get_category_parents($id, $link = FALSE, $separator = '/', $nicename = FALSE){
+/**
+ * Retrieve category parents with separator.
+ *
+ * @since 1.2.0
+ *
+ * @param int $id Category ID.
+ * @param bool $link Optional, default is false. Whether to format with link.
+ * @param string $separator Optional, default is '/'. How to separate categories.
+ * @param bool $nicename Optional, default is false. Whether to use nice name for display.
+ * @param array $visited Optional. Already linked to categories to prevent duplicates.
+ * @return string
+ */
+function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
$chain = '';
- $parent = &get_category($id);
+ $parent = &get_category( $id );
if ( is_wp_error( $parent ) )
return $parent;
@@ -55,44 +62,83 @@ function get_category_parents($id, $link = FALSE, $separator = '/', $nicename =
else
$name = $parent->cat_name;
- if ( $parent->parent && ($parent->parent != $parent->term_id) )
- $chain .= get_category_parents($parent->parent, $link, $separator, $nicename);
+ if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
+ $visited[] = $parent->parent;
+ $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
+ }
if ( $link )
- $chain .= 'cat_name) . '">'.$name.'' . $separator;
+ $chain .= 'cat_name ) ) . '">'.$name.'' . $separator;
else
$chain .= $name.$separator;
return $chain;
}
-function get_the_category($id = false) {
- global $post, $term_cache, $blog_id;
+/**
+ * Retrieve post categories.
+ *
+ * @since 0.71
+ * @uses $post
+ *
+ * @param int $id Optional, default to current post ID. The post ID.
+ * @return array
+ */
+function get_the_category( $id = false ) {
+ global $post;
$id = (int) $id;
if ( !$id )
$id = (int) $post->ID;
- $categories = get_object_term_cache($id, 'category');
- if ( false === $categories )
- $categories = wp_get_object_terms($id, 'category');
+ $categories = get_object_term_cache( $id, 'category' );
+ if ( false === $categories ) {
+ $categories = wp_get_object_terms( $id, 'category' );
+ wp_cache_add($id, $categories, 'category_relationships');
+ }
- if ( !empty($categories) )
- usort($categories, '_usort_terms_by_name');
+ if ( !empty( $categories ) )
+ usort( $categories, '_usort_terms_by_name' );
else
$categories = array();
- foreach(array_keys($categories) as $key) {
- _make_cat_compat($categories[$key]);
+ foreach ( (array) array_keys( $categories ) as $key ) {
+ _make_cat_compat( $categories[$key] );
}
return $categories;
}
-function _usort_terms_by_name($a, $b) {
- return strcmp($a->name, $b->name);
+/**
+ * Sort categories by name.
+ *
+ * Used by usort() as a callback, should not be used directly. Can actually be
+ * used to sort any term object.
+ *
+ * @since 2.3.0
+ * @access private
+ *
+ * @param object $a
+ * @param object $b
+ * @return int
+ */
+function _usort_terms_by_name( $a, $b ) {
+ return strcmp( $a->name, $b->name );
}
-function _usort_terms_by_ID($a, $b) {
+/**
+ * Sort categories by ID.
+ *
+ * Used by usort() as a callback, should not be used directly. Can actually be
+ * used to sort any term object.
+ *
+ * @since 2.3.0
+ * @access private
+ *
+ * @param object $a
+ * @param object $b
+ * @return int
+ */
+function _usort_terms_by_ID( $a, $b ) {
if ( $a->term_id > $b->term_id )
return 1;
elseif ( $a->term_id < $b->term_id )
@@ -101,42 +147,60 @@ function _usort_terms_by_ID($a, $b) {
return 0;
}
-function get_the_category_by_ID($cat_ID) {
+/**
+ * Retrieve category name based on category ID.
+ *
+ * @since 0.71
+ *
+ * @param int $cat_ID Category ID.
+ * @return string Category name.
+ */
+function get_the_category_by_ID( $cat_ID ) {
$cat_ID = (int) $cat_ID;
- $category = &get_category($cat_ID);
+ $category = &get_category( $cat_ID );
if ( is_wp_error( $category ) )
return $category;
return $category->name;
}
-function get_the_category_list($separator = '', $parents='') {
+/**
+ * Retrieve category list in either HTML list or custom format.
+ *
+ * @since 1.5.1
+ *
+ * @param string $separator Optional, default is empty string. Separator for between the categories.
+ * @param string $parents Optional. How to display the parents.
+ * @param int $post_id Optional. Post ID to retrieve categories.
+ * @return string
+ */
+function get_the_category_list( $separator = '', $parents='', $post_id = false ) {
global $wp_rewrite;
- $categories = get_the_category();
- if (empty($categories))
- return apply_filters('the_category', __('Uncategorized'), $separator, $parents);
+ $categories = get_the_category( $post_id );
+ if ( empty( $categories ) )
+ return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents );
- $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"';
+ $rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"';
$thelist = '';
if ( '' == $separator ) {
$thelist .= '
';
foreach ( $categories as $category ) {
$thelist .= "\n\t- ";
- switch ( strtolower($parents) ) {
+ switch ( strtolower( $parents ) ) {
case 'multiple':
- if ($category->parent)
- $thelist .= get_category_parents($category->parent, TRUE);
- $thelist .= 'name) . '" ' . $rel . '>' . $category->name.'
';
+ if ( $category->parent )
+ $thelist .= get_category_parents( $category->parent, true, $separator );
+ $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->name.'';
break;
case 'single':
- $thelist .= 'name) . '" ' . $rel . '>';
- if ($category->parent)
- $thelist .= get_category_parents($category->parent, FALSE);
+ $thelist .= 'name ) ) . '" ' . $rel . '>';
+ if ( $category->parent )
+ $thelist .= get_category_parents( $category->parent, false, $separator );
$thelist .= $category->name.'';
break;
case '':
default:
- $thelist .= 'name) . '" ' . $rel . '>' . $category->cat_name.'';
+ $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->cat_name.'';
}
}
$thelist .= '
';
@@ -145,95 +209,183 @@ function get_the_category_list($separator = '', $parents='') {
foreach ( $categories as $category ) {
if ( 0 < $i )
$thelist .= $separator . ' ';
- switch ( strtolower($parents) ) {
+ switch ( strtolower( $parents ) ) {
case 'multiple':
if ( $category->parent )
- $thelist .= get_category_parents($category->parent, TRUE);
- $thelist .= 'name) . '" ' . $rel . '>' . $category->cat_name.'';
+ $thelist .= get_category_parents( $category->parent, true, $separator );
+ $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->cat_name.'';
break;
case 'single':
- $thelist .= 'name) . '" ' . $rel . '>';
+ $thelist .= 'name ) ) . '" ' . $rel . '>';
if ( $category->parent )
- $thelist .= get_category_parents($category->parent, FALSE);
+ $thelist .= get_category_parents( $category->parent, false, $separator );
$thelist .= "$category->cat_name";
break;
case '':
default:
- $thelist .= 'name) . '" ' . $rel . '>' . $category->name.'';
+ $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->name.'';
}
++$i;
}
}
- return apply_filters('the_category', $thelist, $separator, $parents);
+ return apply_filters( 'the_category', $thelist, $separator, $parents );
}
-function in_category( $category ) { // Check if the current post is in the given category
- global $post, $blog_id;
- $categories = get_object_term_cache($post->ID, 'category');
- if ( false === $categories )
- $categories = wp_get_object_terms($post->ID, 'category');
- if(array_key_exists($category, $categories))
- return true;
- else
+/**
+ * Check if the current post in within any of the given categories.
+ *
+ * The given categories are checked against the post's categories' term_ids, names and slugs.
+ * Categories given as integers will only be checked against the post's categories' term_ids.
+ *
+ * Prior to v2.5 of WordPress, category names were not supported.
+ * Prior to v2.7, category slugs were not supported.
+ * Prior to v2.7, only one category could be compared: in_category( $single_category ).
+ * Prior to v2.7, this function could only be used in the WordPress Loop.
+ * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.
+ *
+ * @since 1.2.0
+ *
+ * @uses is_object_in_term()
+ *
+ * @param int|string|array $category. Category ID, name or slug, or array of said.
+ * @param int|post object Optional. Post to check instead of the current post. @since 2.7.0
+ * @return bool True if the current post is in any of the given categories.
+ */
+function in_category( $category, $_post = null ) {
+ if ( empty( $category ) )
return false;
-}
-function the_category($separator = '', $parents='') {
- echo get_the_category_list($separator, $parents);
+ if ( $_post ) {
+ $_post = get_post( $_post );
+ } else {
+ $_post =& $GLOBALS['post'];
+ }
+
+ if ( !$_post )
+ return false;
+
+ $r = is_object_in_term( $_post->ID, 'category', $category );
+ if ( is_wp_error( $r ) )
+ return false;
+ return $r;
}
-function category_description($category = 0) {
- global $cat;
- if ( !$category )
- $category = $cat;
+/**
+ * Display the category list for the post.
+ *
+ * @since 0.71
+ *
+ * @param string $separator Optional, default is empty string. Separator for between the categories.
+ * @param string $parents Optional. How to display the parents.
+ * @param int $post_id Optional. Post ID to retrieve categories.
+ */
+function the_category( $separator = '', $parents='', $post_id = false ) {
+ echo get_the_category_list( $separator, $parents, $post_id );
+}
- return get_term_field('description', $category, 'category');
+/**
+ * Retrieve category description.
+ *
+ * @since 1.0.0
+ *
+ * @param int $category Optional. Category ID. Will use global category ID by default.
+ * @return string Category description, available.
+ */
+function category_description( $category = 0 ) {
+ return term_description( $category, 'category' );
}
-function wp_dropdown_categories($args = '') {
+/**
+ * Display or retrieve the HTML dropdown list of categories.
+ *
+ * The list of arguments is below:
+ * 'show_option_all' (string) - Text to display for showing all categories.
+ * 'show_option_none' (string) - Text to display for showing no categories.
+ * 'orderby' (string) default is 'ID' - What column to use for ordering the
+ * categories.
+ * 'order' (string) default is 'ASC' - What direction to order categories.
+ * 'show_last_update' (bool|int) default is 0 - See {@link get_categories()}
+ * 'show_count' (bool|int) default is 0 - Whether to show how many posts are
+ * in the category.
+ * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that
+ * don't have any posts attached to them.
+ * 'child_of' (int) default is 0 - See {@link get_categories()}.
+ * 'exclude' (string) - See {@link get_categories()}.
+ * 'echo' (bool|int) default is 1 - Whether to display or retrieve content.
+ * 'depth' (int) - The max depth.
+ * 'tab_index' (int) - Tab index for select element.
+ * 'name' (string) - The name attribute value for selected element.
+ * 'class' (string) - The class attribute value for selected element.
+ * 'selected' (int) - Which category ID is selected.
+ *
+ * The 'hierarchical' argument, which is disabled by default, will override the
+ * depth argument, unless it is true. When the argument is false, it will
+ * display all of the categories. When it is enabled it will use the value in
+ * the 'depth' argument.
+ *
+ * @since 2.1.0
+ *
+ * @param string|array $args Optional. Override default arguments.
+ * @return string HTML content only if 'echo' argument is 0.
+ */
+function wp_dropdown_categories( $args = '' ) {
$defaults = array(
'show_option_all' => '', 'show_option_none' => '',
- 'orderby' => 'ID', 'order' => 'ASC',
+ 'orderby' => 'id', 'order' => 'ASC',
'show_last_update' => 0, 'show_count' => 0,
'hide_empty' => 1, 'child_of' => 0,
'exclude' => '', 'echo' => 1,
'selected' => 0, 'hierarchical' => 0,
- 'name' => 'cat', 'class' => 'postform'
+ 'name' => 'cat', 'class' => 'postform',
+ 'depth' => 0, 'tab_index' => 0
);
- $defaults['selected'] = ( is_category() ) ? get_query_var('cat') : 0;
+ $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;
$r = wp_parse_args( $args, $defaults );
+
+ if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) {
+ $r['pad_counts'] = true;
+ }
+
$r['include_last_update_time'] = $r['show_last_update'];
extract( $r );
- $categories = get_categories($r);
+ $tab_index_attribute = '';
+ if ( (int) $tab_index > 0 )
+ $tab_index_attribute = " tabindex=\"$tab_index\"";
+
+ $categories = get_categories( $r );
+ $name = esc_attr($name);
+ $class = esc_attr($class);
$output = '';
- if ( ! empty($categories) ) {
- $output = "