--- a/wp/wp-includes/widgets/class-wp-widget-categories.php Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-includes/widgets/class-wp-widget-categories.php Tue Dec 15 13:49:49 2020 +0100
@@ -34,8 +34,8 @@
* Outputs the content for the current Categories widget instance.
*
* @since 2.8.0
- *
- * @staticvar bool $first_dropdown
+ * @since 4.2.0 Creates a unique HTML ID for the `<select>` element
+ * if more than one instance is displayed on the page.
*
* @param array $args Display arguments including 'before_title', 'after_title',
* 'before_widget', and 'after_widget'.
@@ -44,14 +44,15 @@
public function widget( $args, $instance ) {
static $first_dropdown = true;
- $title = ! empty( $instance['title'] ) ? $instance['title'] : __( 'Categories' );
+ $default_title = __( 'Categories' );
+ $title = ! empty( $instance['title'] ) ? $instance['title'] : $default_title;
/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
- $c = ! empty( $instance['count'] ) ? '1' : '0';
- $h = ! empty( $instance['hierarchical'] ) ? '1' : '0';
- $d = ! empty( $instance['dropdown'] ) ? '1' : '0';
+ $count = ! empty( $instance['count'] ) ? '1' : '0';
+ $hierarchical = ! empty( $instance['hierarchical'] ) ? '1' : '0';
+ $dropdown = ! empty( $instance['dropdown'] ) ? '1' : '0';
echo $args['before_widget'];
@@ -61,12 +62,12 @@
$cat_args = array(
'orderby' => 'name',
- 'show_count' => $c,
- 'hierarchical' => $h,
+ 'show_count' => $count,
+ 'hierarchical' => $hierarchical,
);
- if ( $d ) {
- echo sprintf( '<form action="%s" method="get">', esc_url( home_url() ) );
+ if ( $dropdown ) {
+ printf( '<form action="%s" method="get">', esc_url( home_url() ) );
$dropdown_id = ( $first_dropdown ) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}";
$first_dropdown = false;
@@ -89,9 +90,11 @@
wp_dropdown_categories( apply_filters( 'widget_categories_dropdown_args', $cat_args, $instance ) );
echo '</form>';
+
+ $type_attr = current_theme_supports( 'html5', 'script' ) ? '' : ' type="text/javascript"';
?>
-<script type='text/javascript'>
+<script<?php echo $type_attr; ?>>
/* <![CDATA[ */
(function() {
var dropdown = document.getElementById( "<?php echo esc_js( $dropdown_id ); ?>" );
@@ -107,24 +110,40 @@
<?php
} else {
+ $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';
+
+ /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
+ $format = apply_filters( 'navigation_widgets_format', $format );
+
+ if ( 'html5' === $format ) {
+ // The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
+ $title = trim( strip_tags( $title ) );
+ $aria_label = $title ? $title : $default_title;
+ echo '<nav role="navigation" aria-label="' . esc_attr( $aria_label ) . '">';
+ }
?>
- <ul>
- <?php
- $cat_args['title_li'] = '';
+
+ <ul>
+ <?php
+ $cat_args['title_li'] = '';
- /**
- * Filters the arguments for the Categories widget.
- *
- * @since 2.8.0
- * @since 4.9.0 Added the `$instance` parameter.
- *
- * @param array $cat_args An array of Categories widget options.
- * @param array $instance Array of settings for the current widget.
- */
- wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
- ?>
- </ul>
+ /**
+ * Filters the arguments for the Categories widget.
+ *
+ * @since 2.8.0
+ * @since 4.9.0 Added the `$instance` parameter.
+ *
+ * @param array $cat_args An array of Categories widget options.
+ * @param array $instance Array of settings for the current widget.
+ */
+ wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
+ ?>
+ </ul>
+
<?php
+ if ( 'html5' === $format ) {
+ echo '</nav>';
+ }
}
echo $args['after_widget'];
@@ -158,23 +177,29 @@
* @param array $instance Current settings.
*/
public function form( $instance ) {
- //Defaults
+ // Defaults.
$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
$count = isset( $instance['count'] ) ? (bool) $instance['count'] : false;
$hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false;
$dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false;
?>
- <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" /></p>
-
- <p><input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'dropdown' ); ?>" name="<?php echo $this->get_field_name( 'dropdown' ); ?>"<?php checked( $dropdown ); ?> />
- <label for="<?php echo $this->get_field_id( 'dropdown' ); ?>"><?php _e( 'Display as dropdown' ); ?></label><br />
+ <p>
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
+ </p>
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>"<?php checked( $count ); ?> />
- <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show post counts' ); ?></label><br />
+ <p>
+ <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'dropdown' ); ?>" name="<?php echo $this->get_field_name( 'dropdown' ); ?>"<?php checked( $dropdown ); ?> />
+ <label for="<?php echo $this->get_field_id( 'dropdown' ); ?>"><?php _e( 'Display as dropdown' ); ?></label>
+ <br />
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'hierarchical' ); ?>" name="<?php echo $this->get_field_name( 'hierarchical' ); ?>"<?php checked( $hierarchical ); ?> />
- <label for="<?php echo $this->get_field_id( 'hierarchical' ); ?>"><?php _e( 'Show hierarchy' ); ?></label></p>
+ <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>"<?php checked( $count ); ?> />
+ <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show post counts' ); ?></label>
+ <br />
+
+ <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'hierarchical' ); ?>" name="<?php echo $this->get_field_name( 'hierarchical' ); ?>"<?php checked( $hierarchical ); ?> />
+ <label for="<?php echo $this->get_field_id( 'hierarchical' ); ?>"><?php _e( 'Show hierarchy' ); ?></label>
+ </p>
<?php
}