--- a/wp/wp-includes/widgets/class-wp-widget-pages.php Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-includes/widgets/class-wp-widget-pages.php Tue Dec 15 13:49:49 2020 +0100
@@ -40,7 +40,8 @@
* @param array $instance Settings for the current Pages widget instance.
*/
public function widget( $args, $instance ) {
- $title = ! empty( $instance['title'] ) ? $instance['title'] : __( 'Pages' );
+ $default_title = __( 'Pages' );
+ $title = ! empty( $instance['title'] ) ? $instance['title'] : $default_title;
/**
* Filters the widget title.
@@ -56,22 +57,22 @@
$sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby'];
$exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude'];
- if ( $sortby == 'menu_order' ) {
+ if ( 'menu_order' === $sortby ) {
$sortby = 'menu_order, post_title';
}
- /**
- * Filters the arguments for the Pages widget.
- *
- * @since 2.8.0
- * @since 4.9.0 Added the `$instance` parameter.
- *
- * @see wp_list_pages()
- *
- * @param array $args An array of arguments to retrieve the pages list.
- * @param array $instance Array of settings for the current widget.
- */
$out = wp_list_pages(
+ /**
+ * Filters the arguments for the Pages widget.
+ *
+ * @since 2.8.0
+ * @since 4.9.0 Added the `$instance` parameter.
+ *
+ * @see wp_list_pages()
+ *
+ * @param array $args An array of arguments to retrieve the pages list.
+ * @param array $instance Array of settings for the current widget.
+ */
apply_filters(
'widget_pages_args',
array(
@@ -89,11 +90,29 @@
if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
}
+
+ $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 echo $out; ?>
- </ul>
+
+ <ul>
+ <?php echo $out; ?>
+ </ul>
+
<?php
+ if ( 'html5' === $format ) {
+ echo '</nav>';
+ }
+
echo $args['after_widget'];
}
}
@@ -111,7 +130,7 @@
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = sanitize_text_field( $new_instance['title'] );
- if ( in_array( $new_instance['sortby'], array( 'post_title', 'menu_order', 'ID' ) ) ) {
+ if ( in_array( $new_instance['sortby'], array( 'post_title', 'menu_order', 'ID' ), true ) ) {
$instance['sortby'] = $new_instance['sortby'];
} else {
$instance['sortby'] = 'menu_order';
@@ -130,7 +149,7 @@
* @param array $instance Current settings.
*/
public function form( $instance ) {
- //Defaults
+ // Defaults.
$instance = wp_parse_args(
(array) $instance,
array(
@@ -144,6 +163,7 @@
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
</p>
+
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>"><?php _e( 'Sort by:' ); ?></label>
<select name="<?php echo esc_attr( $this->get_field_name( 'sortby' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>" class="widefat">
@@ -152,6 +172,7 @@
<option value="ID"<?php selected( $instance['sortby'], 'ID' ); ?>><?php _e( 'Page ID' ); ?></option>
</select>
</p>
+
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>"><?php _e( 'Exclude:' ); ?></label>
<input type="text" value="<?php echo esc_attr( $instance['exclude'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'exclude' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>" class="widefat" />