X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f5fcdc7994bb67cce809bc4777944ae8b7fad4a4..53f4633144ed68c8b8fb5861f992b5489894a940:/wp-includes/category-template.php diff --git a/wp-includes/category-template.php b/wp-includes/category-template.php index 9a2120c9..d29ae479 100644 --- a/wp-includes/category-template.php +++ b/wp-includes/category-template.php @@ -65,10 +65,15 @@ function get_category_parents( $id, $link = false, $separator = '/', $nicename = /** * Retrieve post categories. * + * This tag may be used outside The Loop by passing a post id as the parameter. + * + * Note: This function only returns results from the default "category" taxonomy. + * For custom taxonomies use get_the_terms(). + * * @since 0.71 * * @param int $id Optional, default to current post ID. The post ID. - * @return array + * @return array Array of objects, one for each category assigned to the post. */ function get_the_category( $id = false ) { $categories = get_the_terms( $id, 'category' ); @@ -153,6 +158,8 @@ function get_the_category_by_ID( $cat_ID ) { * * @since 1.5.1 * + * @global WP_Rewrite $wp_rewrite + * * @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. @@ -479,7 +486,7 @@ function wp_dropdown_categories( $args = '' ) { * @since 2.1.0 * * @param string|array $args Optional. Override default arguments. - * @return false|null|string HTML content only if 'echo' argument is 0. + * @return false|string HTML content only if 'echo' argument is 0. */ function wp_list_categories( $args = '' ) { $defaults = array( @@ -532,7 +539,28 @@ function wp_list_categories( $args = '' ) { } } else { if ( ! empty( $show_option_all ) ) { - $posts_page = ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) ) ? get_permalink( get_option( 'page_for_posts' ) ) : home_url( '/' ); + + $posts_page = ''; + + // For taxonomies that belong only to custom post types, point to a valid archive. + $taxonomy_object = get_taxonomy( $r['taxonomy'] ); + if ( ! in_array( 'post', $taxonomy_object->object_type ) && ! in_array( 'page', $taxonomy_object->object_type ) ) { + foreach ( $taxonomy_object->object_type as $object_type ) { + $_object_type = get_post_type_object( $object_type ); + + // Grab the first one. + if ( ! empty( $_object_type->has_archive ) ) { + $posts_page = get_post_type_archive_link( $object_type ); + break; + } + } + } + + // Fallback for the 'All' link is the front page. + if ( ! $posts_page ) { + $posts_page = 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) ? get_permalink( get_option( 'page_for_posts' ) ) : home_url( '/' ); + } + $posts_page = esc_url( $posts_page ); if ( 'list' == $r['style'] ) { $output .= "
  • $show_option_all
  • "; @@ -608,7 +636,8 @@ function wp_list_categories( $args = '' ) { * @since 2.3.0 * * @param array|string|null $args Optional. Override default arguments. - * @return null|false Generated tag cloud, only if no failures and 'array' is set for the 'format' argument. + * @return void|array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument. + * Otherwise, this function outputs the tag cloud. */ function wp_tag_cloud( $args = '' ) { $defaults = array( @@ -629,7 +658,7 @@ function wp_tag_cloud( $args = '' ) { else $link = get_term_link( intval($tag->term_id), $tag->taxonomy ); if ( is_wp_error( $link ) ) - return false; + return; $tags[ $key ]->link = $link; $tags[ $key ]->id = $tag->term_id; @@ -656,8 +685,8 @@ function wp_tag_cloud( $args = '' ) { /** * Default topic count scaling for tag links * - * @param integer $count number of posts with that tag - * @return integer scaled count + * @param int $count number of posts with that tag + * @return int scaled count */ function default_topic_count_scale( $count ) { return round(log10($count + 1) * 100); @@ -784,24 +813,46 @@ function wp_generate_tag_cloud( $tags, $args = '' ) { $font_spread = 1; $font_step = $font_spread / $spread; - $a = array(); - + // Assemble the data that will be used to generate the tag cloud markup. + $tags_data = array(); foreach ( $tags as $key => $tag ) { + $tag_id = isset( $tag->id ) ? $tag->id : $key; + $count = $counts[ $key ]; $real_count = $real_counts[ $key ]; - $tag_link = '#' != $tag->link ? esc_url( $tag->link ) : '#'; - $tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key; - $tag_name = $tags[ $key ]->name; if ( $translate_nooped_plural ) { - $title_attribute = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) ); + $title = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) ); } else { - $title_attribute = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args ); + $title = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args ); } - $a[] = "$tag_name"; + $tags_data[] = array( + 'id' => $tag_id, + 'url' => '#' != $tag->link ? $tag->link : '#', + 'name' => $tag->name, + 'title' => $title, + 'slug' => $tag->slug, + 'real_count' => $real_count, + 'class' => 'tag-link-' . $tag_id, + 'font_size' => $args['smallest'] + ( $count - $min_count ) * $font_step, + ); + } + + /** + * Filter the data used to generate the tag cloud. + * + * @since 4.3.0 + * + * @param array $tags_data An array of term data for term used to generate the tag cloud. + */ + $tags_data = apply_filters( 'wp_generate_tag_cloud_data', $tags_data ); + + $a = array(); + + // generate the output links array + foreach ( $tags_data as $key => $tag_data ) { + $a[] = "" . esc_html( $tag_data['name'] ) . ""; } switch ( $args['format'] ) { @@ -847,6 +898,7 @@ function wp_generate_tag_cloud( $tags, $args = '' ) { * * @since 3.1.0 * @access private + * @return int */ function _wp_object_name_sort_cb( $a, $b ) { return strnatcasecmp( $a->name, $b->name ); @@ -857,6 +909,7 @@ function _wp_object_name_sort_cb( $a, $b ) { * * @since 3.1.0 * @access private + * @return bool */ function _wp_object_count_sort_cb( $a, $b ) { return ( $a->count > $b->count ); @@ -872,6 +925,7 @@ function _wp_object_count_sort_cb( $a, $b ) { * @uses Walker_Category to create HTML list content. * @since 2.1.0 * @see Walker_Category::walk() for parameters and return description. + * @return string */ function walk_category_tree() { $args = func_get_args(); @@ -881,7 +935,7 @@ function walk_category_tree() { } else { $walker = $args[2]['walker']; } - return call_user_func_array(array( &$walker, 'walk' ), $args ); + return call_user_func_array( array( $walker, 'walk' ), $args ); } /** @@ -890,16 +944,17 @@ function walk_category_tree() { * @uses Walker_CategoryDropdown to create HTML dropdown content. * @since 2.1.0 * @see Walker_CategoryDropdown::walk() for parameters and return description. + * @return string */ function walk_category_dropdown_tree() { $args = func_get_args(); // the user's options are the third parameter - if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') ) + if ( empty( $args[2]['walker'] ) || ! ( $args[2]['walker'] instanceof Walker ) ) { $walker = new Walker_CategoryDropdown; - else + } else { $walker = $args[2]['walker']; - - return call_user_func_array(array( &$walker, 'walk' ), $args ); + } + return call_user_func_array( array( $walker, 'walk' ), $args ); } /** @@ -1144,13 +1199,15 @@ class Walker_CategoryDropdown extends Walker { /** This filter is documented in wp-includes/category-template.php */ $cat_name = apply_filters( 'list_cats', $category->name, $category ); - if ( ! isset( $args['value_field'] ) || ! isset( $category->{$args['value_field']} ) ) { - $args['value_field'] = 'term_id'; + if ( isset( $args['value_field'] ) && isset( $category->{$args['value_field']} ) ) { + $value_field = $args['value_field']; + } else { + $value_field = 'term_id'; } - $output .= "\t