diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-includes/widgets/class-wp-widget-tag-cloud.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wp/wp-includes/widgets/class-wp-widget-tag-cloud.php Mon Oct 14 17:39:30 2019 +0200 @@ -0,0 +1,196 @@ + __( 'A cloud of your most used tags.' ), + 'customize_selective_refresh' => true, + ); + parent::__construct( 'tag_cloud', __( 'Tag Cloud' ), $widget_ops ); + } + + /** + * Outputs the content for the current Tag Cloud widget instance. + * + * @since 2.8.0 + * + * @param array $args Display arguments including 'before_title', 'after_title', + * 'before_widget', and 'after_widget'. + * @param array $instance Settings for the current Tag Cloud widget instance. + */ + public function widget( $args, $instance ) { + $current_taxonomy = $this->_get_current_taxonomy( $instance ); + + if ( ! empty( $instance['title'] ) ) { + $title = $instance['title']; + } else { + if ( 'post_tag' === $current_taxonomy ) { + $title = __( 'Tags' ); + } else { + $tax = get_taxonomy( $current_taxonomy ); + $title = $tax->labels->name; + } + } + + $show_count = ! empty( $instance['count'] ); + + /** + * Filters the taxonomy used in the Tag Cloud widget. + * + * @since 2.8.0 + * @since 3.0.0 Added taxonomy drop-down. + * @since 4.9.0 Added the `$instance` parameter. + * + * @see wp_tag_cloud() + * + * @param array $args Args used for the tag cloud widget. + * @param array $instance Array of settings for the current widget. + */ + $tag_cloud = wp_tag_cloud( apply_filters( 'widget_tag_cloud_args', array( + 'taxonomy' => $current_taxonomy, + 'echo' => false, + 'show_count' => $show_count, + ), $instance ) ); + + if ( empty( $tag_cloud ) ) { + return; + } + + /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } + + echo '
'; + + echo $tag_cloud; + + echo "
\n"; + echo $args['after_widget']; + } + + /** + * Handles updating settings for the current Tag Cloud widget instance. + * + * @since 2.8.0 + * + * @param array $new_instance New settings for this instance as input by the user via + * WP_Widget::form(). + * @param array $old_instance Old settings for this instance. + * @return array Settings to save or bool false to cancel saving. + */ + public function update( $new_instance, $old_instance ) { + $instance = array(); + $instance['title'] = sanitize_text_field( $new_instance['title'] ); + $instance['count'] = ! empty( $new_instance['count'] ) ? 1 : 0; + $instance['taxonomy'] = stripslashes($new_instance['taxonomy']); + return $instance; + } + + /** + * Outputs the Tag Cloud widget settings form. + * + * @since 2.8.0 + * + * @param array $instance Current settings. + */ + public function form( $instance ) { + $current_taxonomy = $this->_get_current_taxonomy($instance); + $title_id = $this->get_field_id( 'title' ); + $count = isset( $instance['count'] ) ? (bool) $instance['count'] : false; + $instance['title'] = ! empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + + echo '

+ +

'; + + $taxonomies = get_taxonomies( array( 'show_tagcloud' => true ), 'object' ); + $id = $this->get_field_id( 'taxonomy' ); + $name = $this->get_field_name( 'taxonomy' ); + $input = ''; + + $count_checkbox = sprintf( + '

', + $this->get_field_id( 'count' ), + $this->get_field_name( 'count' ), + checked( $count, true, false ), + __( 'Show tag counts' ) + ); + + switch ( count( $taxonomies ) ) { + + // No tag cloud supporting taxonomies found, display error message + case 0: + echo '

' . __( 'The tag cloud will not be displayed since there are no taxonomies that support the tag cloud widget.' ) . '

'; + printf( $input, '' ); + break; + + // Just a single tag cloud supporting taxonomy found, no need to display a select. + case 1: + $keys = array_keys( $taxonomies ); + $taxonomy = reset( $keys ); + printf( $input, esc_attr( $taxonomy ) ); + echo $count_checkbox; + break; + + // More than one tag cloud supporting taxonomy found, display a select. + default: + printf( + '

' . + '

' . $count_checkbox; + } + } + + /** + * Retrieves the taxonomy for the current Tag cloud widget instance. + * + * @since 4.4.0 + * + * @param array $instance Current settings. + * @return string Name of the current taxonomy if set, otherwise 'post_tag'. + */ + public function _get_current_taxonomy($instance) { + if ( !empty($instance['taxonomy']) && taxonomy_exists($instance['taxonomy']) ) + return $instance['taxonomy']; + + return 'post_tag'; + } +}