+ $link .= '>';
+
+ if ( empty( $args['feed_image'] ) ) {
+ $link .= $name;
+ } else {
+ $link .= "<img src='" . $args['feed_image'] . "'$alt" . ' />';
+ }
+ $link .= '</a>';
+
+ if ( empty( $args['feed_image'] ) ) {
+ $link .= ')';
+ }
+ }
+
+ if ( ! empty( $args['show_count'] ) ) {
+ $link .= ' (' . number_format_i18n( $category->count ) . ')';
+ }
+ if ( 'list' == $args['style'] ) {
+ $output .= "\t<li";
+ $css_classes = array(
+ 'cat-item',
+ 'cat-item-' . $category->term_id,
+ );
+
+ if ( ! empty( $args['current_category'] ) ) {
+ $_current_category = get_term( $args['current_category'], $category->taxonomy );
+ if ( $category->term_id == $args['current_category'] ) {
+ $css_classes[] = 'current-cat';
+ } elseif ( $category->term_id == $_current_category->parent ) {
+ $css_classes[] = 'current-cat-parent';
+ }
+ }
+
+ /**
+ * Filter the list of CSS classes to include with each category in the list.
+ *
+ * @since 4.2.0
+ *
+ * @see wp_list_categories()
+ *
+ * @param array $css_classes An array of CSS classes to be applied to each list item.
+ * @param object $category Category data object.
+ * @param int $depth Depth of page, used for padding.
+ * @param array $args An array of wp_list_categories() arguments.
+ */
+ $css_classes = implode( ' ', apply_filters( 'category_css_class', $css_classes, $category, $depth, $args ) );
+
+ $output .= ' class="' . $css_classes . '"';
+ $output .= ">$link\n";
+ } else {
+ $output .= "\t$link<br />\n";
+ }
+ }
+
+ /**
+ * Ends the element output, if needed.
+ *
+ * @see Walker::end_el()
+ *
+ * @since 2.1.0
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $page Not used.
+ * @param int $depth Depth of category. Not used.
+ * @param array $args An array of arguments. Only uses 'list' for whether should append to output. @see wp_list_categories()
+ */
+ public function end_el( &$output, $page, $depth = 0, $args = array() ) {
+ if ( 'list' != $args['style'] )
+ return;
+
+ $output .= "</li>\n";
+ }
+
+}
+
+/**
+ * Create HTML dropdown list of Categories.
+ *
+ * @package WordPress
+ * @since 2.1.0
+ * @uses Walker
+ */
+class Walker_CategoryDropdown extends Walker {
+ /**
+ * @see Walker::$tree_type
+ * @since 2.1.0
+ * @var string
+ */
+ public $tree_type = 'category';
+
+ /**
+ * @see Walker::$db_fields
+ * @since 2.1.0
+ * @todo Decouple this
+ * @var array
+ */
+ public $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
+
+ /**
+ * Start the element output.
+ *
+ * @see Walker::start_el()
+ * @since 2.1.0
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $category Category data object.
+ * @param int $depth Depth of category. Used for padding.
+ * @param array $args Uses 'selected', 'show_count', and 'value_field' keys, if they exist.
+ * See {@see wp_dropdown_categories()}.
+ */
+ public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
+ $pad = str_repeat(' ', $depth * 3);
+
+ /** 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']} ) ) {
+ $value_field = $args['value_field'];
+ } else {
+ $value_field = 'term_id';
+ }
+
+ $output .= "\t<option class=\"level-$depth\" value=\"" . esc_attr( $category->{$value_field} ) . "\"";
+
+ // Type-juggling causes false matches, so we force everything to a string.
+ if ( (string) $category->{$value_field} === (string) $args['selected'] )
+ $output .= ' selected="selected"';
+ $output .= '>';
+ $output .= $pad.$cat_name;
+ if ( $args['show_count'] )
+ $output .= ' ('. number_format_i18n( $category->count ) .')';
+ $output .= "</option>\n";
+ }