X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f..784f914b1e4b1c62d6657e86397c2e83bcee4295:/wp-includes/category-template.php diff --git a/wp-includes/category-template.php b/wp-includes/category-template.php index 7369fda9..35d6c82e 100644 --- a/wp-includes/category-template.php +++ b/wp-includes/category-template.php @@ -1,9 +1,10 @@ 'cat', 'id' => '', 'class' => 'postform', 'depth' => 0, 'tab_index' => 0, 'taxonomy' => 'category', - 'hide_if_empty' => false, 'option_none_value' => -1 + 'hide_if_empty' => false, 'option_none_value' => -1, + 'value_field' => 'term_id', ); $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0; // Back compat. if ( isset( $args['type'] ) && 'link' == $args['type'] ) { - _deprecated_argument( __FUNCTION__, '3.0', '' ); + /* translators: 1: "type => link", 2: "taxonomy => link_category" alternative */ + _deprecated_argument( __FUNCTION__, '3.0', + sprintf( __( '%1$s is deprecated. Use %2$s instead.' ), + 'type => link', + 'taxonomy => link_category' + ) + ); $args['taxonomy'] = 'link_category'; } @@ -356,7 +396,12 @@ function wp_dropdown_categories( $args = '' ) { if ( (int) $tab_index > 0 ) { $tab_index_attribute = " tabindex=\"$tab_index\""; } - $categories = get_terms( $r['taxonomy'], $r ); + + // Avoid clashes with the 'name' param of get_terms(). + $get_terms_args = $r; + unset( $get_terms_args['name'] ); + $categories = get_terms( $r['taxonomy'], $get_terms_args ); + $name = esc_attr( $r['name'] ); $class = esc_attr( $r['class'] ); $id = $r['id'] ? esc_attr( $r['id'] ) : $name; @@ -434,47 +479,75 @@ function wp_dropdown_categories( $args = '' ) { /** * Display or retrieve the HTML list of categories. * - * The list of arguments is below: - * 'show_option_all' (string) - Text to display for showing all 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_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. - * 'use_desc_for_title' (bool|int) default is 1 - Whether to use the - * category description as the title attribute. - * 'feed' - See {@link get_categories()}. - * 'feed_type' - See {@link get_categories()}. - * 'feed_image' - See {@link get_categories()}. - * 'child_of' (int) default is 0 - See {@link get_categories()}. - * 'exclude' (string) - See {@link get_categories()}. - * 'exclude_tree' (string) - See {@link get_categories()}. - * 'echo' (bool|int) default is 1 - Whether to display or retrieve content. - * 'current_category' (int) - See {@link get_categories()}. - * 'hierarchical' (bool) - See {@link get_categories()}. - * 'title_li' (string) - See {@link get_categories()}. - * 'depth' (int) - The max depth. - * * @since 2.1.0 - * - * @param string|array $args Optional. Override default arguments. - * @return string HTML content only if 'echo' argument is 0. + * @since 4.4.0 Introduced the `hide_title_if_empty` and `separator` arguments. The `current_category` argument was modified to + * optionally accept an array of values. + * + * @param string|array $args { + * Array of optional arguments. + * + * @type string $show_option_all Text to display for showing all categories. Default empty string. + * @type string $show_option_none Text to display for the 'no categories' option. + * Default 'No categories'. + * @type string $orderby The column to use for ordering categories. Default 'ID'. + * @type string $order Which direction to order categories. Accepts 'ASC' or 'DESC'. + * Default 'ASC'. + * @type bool|int $show_count Whether to show how many posts are in the category. Default 0. + * @type bool|int $hide_empty Whether to hide categories that don't have any posts attached to them. + * Default 1. + * @type bool|int $use_desc_for_title Whether to use the category description as the title attribute. + * Default 1. + * @type string $feed Text to use for the feed link. Default 'Feed for all posts filed + * under [cat name]'. + * @type string $feed_type Feed type. Used to build feed link. See {@link get_term_feed_link()}. + * Default empty string (default feed). + * @type string $feed_image URL of an image to use for the feed link. Default empty string. + * @type int $child_of Term ID to retrieve child terms of. See {@link get_terms()}. Default 0. + * @type array|string $exclude Array or comma/space-separated string of term IDs to exclude. + * If `$hierarchical` is true, descendants of `$exclude` terms will also + * be excluded; see `$exclude_tree`. See {@link get_terms()}. + * Default empty string. + * @type array|string $exclude_tree Array or comma/space-separated string of term IDs to exclude, along + * with their descendants. See {@link get_terms()}. Default empty string. + * @type bool|int $echo True to echo markup, false to return it. Default 1. + * @type int|array $current_category ID of category, or array of IDs of categories, that should get the + * 'current-cat' class. Default 0. + * @type bool $hierarchical Whether to include terms that have non-empty descendants. + * See {@link get_terms()}. Default true. + * @type string $title_li Text to use for the list title `
  • ` element. Pass an empty string + * to disable. Default 'Categories'. + * @type bool $hide_title_if_empty Whether to hide the `$title_li` element if there are no terms in + * the list. Default false (title will always be shown). + * @type int $depth Category depth. Used for tab indentation. Default 0. + * @type string $taxonomy Taxonomy name. Default 'category'. + * @type string $separator Separator between links. Default '
    '. + * } + * @return false|string HTML content only if 'echo' argument is 0. */ function wp_list_categories( $args = '' ) { $defaults = array( - 'show_option_all' => '', 'show_option_none' => __('No categories'), - 'orderby' => 'name', 'order' => 'ASC', - 'style' => 'list', - 'show_count' => 0, 'hide_empty' => 1, - 'use_desc_for_title' => 1, 'child_of' => 0, - 'feed' => '', 'feed_type' => '', - 'feed_image' => '', 'exclude' => '', - 'exclude_tree' => '', 'current_category' => 0, - 'hierarchical' => true, 'title_li' => __( 'Categories' ), - 'echo' => 1, 'depth' => 0, - 'taxonomy' => 'category' + 'child_of' => 0, + 'current_category' => 0, + 'depth' => 0, + 'echo' => 1, + 'exclude' => '', + 'exclude_tree' => '', + 'feed' => '', + 'feed_image' => '', + 'feed_type' => '', + 'hide_empty' => 1, + 'hide_title_if_empty' => false, + 'hierarchical' => true, + 'order' => 'ASC', + 'orderby' => 'name', + 'separator' => '
    ', + 'show_count' => 0, + 'show_option_all' => '', + 'show_option_none' => __( 'No categories' ), + 'style' => 'list', + 'taxonomy' => 'category', + 'title_li' => __( 'Categories' ), + 'use_desc_for_title' => 1, ); $r = wp_parse_args( $args, $defaults ); @@ -482,8 +555,19 @@ function wp_list_categories( $args = '' ) { if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) $r['pad_counts'] = true; + // Descendants of exclusions should be excluded too. if ( true == $r['hierarchical'] ) { - $r['exclude_tree'] = $r['exclude']; + $exclude_tree = array(); + + if ( $r['exclude_tree'] ) { + $exclude_tree = array_merge( $exclude_tree, wp_parse_id_list( $r['exclude_tree'] ) ); + } + + if ( $r['exclude'] ) { + $exclude_tree = array_merge( $exclude_tree, wp_parse_id_list( $r['exclude'] ) ); + } + + $r['exclude_tree'] = $exclude_tree; $r['exclude'] = ''; } @@ -500,7 +584,7 @@ function wp_list_categories( $args = '' ) { $categories = get_categories( $r ); $output = ''; - if ( $r['title_li'] && 'list' == $r['style'] ) { + if ( $r['title_li'] && 'list' == $r['style'] && ( ! empty( $categories ) || ! $r['hide_title_if_empty'] ) ) { $output = '
  • ' . $r['title_li'] . '