wp/wp-includes/widgets/class-wp-widget-archives.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- a/wp/wp-includes/widgets/class-wp-widget-archives.php	Mon Oct 14 18:06:33 2019 +0200
+++ b/wp/wp-includes/widgets/class-wp-widget-archives.php	Mon Oct 14 18:28:13 2019 +0200
@@ -23,11 +23,11 @@
 	 */
 	public function __construct() {
 		$widget_ops = array(
-			'classname' => 'widget_archive',
-			'description' => __( 'A monthly archive of your site’s Posts.' ),
+			'classname'                   => 'widget_archive',
+			'description'                 => __( 'A monthly archive of your site’s Posts.' ),
 			'customize_selective_refresh' => true,
 		);
-		parent::__construct('archives', __('Archives'), $widget_ops);
+		parent::__construct( 'archives', __( 'Archives' ), $widget_ops );
 	}
 
 	/**
@@ -58,7 +58,7 @@
 			$dropdown_id = "{$this->id_base}-dropdown-{$this->number}";
 			?>
 		<label class="screen-reader-text" for="<?php echo esc_attr( $dropdown_id ); ?>"><?php echo $title; ?></label>
-		<select id="<?php echo esc_attr( $dropdown_id ); ?>" name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
+		<select id="<?php echo esc_attr( $dropdown_id ); ?>" name="archive-dropdown">
 			<?php
 			/**
 			 * Filters the arguments for the Archives widget drop-down.
@@ -71,11 +71,15 @@
 			 * @param array $args     An array of Archives widget drop-down arguments.
 			 * @param array $instance Settings for the current Archives widget instance.
 			 */
-			$dropdown_args = apply_filters( 'widget_archives_dropdown_args', array(
-				'type'            => 'monthly',
-				'format'          => 'option',
-				'show_post_count' => $c
-			), $instance );
+			$dropdown_args = apply_filters(
+				'widget_archives_dropdown_args',
+				array(
+					'type'            => 'monthly',
+					'format'          => 'option',
+					'show_post_count' => $c,
+				),
+				$instance
+			);
 
 			switch ( $dropdown_args['type'] ) {
 				case 'yearly':
@@ -100,27 +104,48 @@
 			<?php wp_get_archives( $dropdown_args ); ?>
 
 		</select>
+
+<script type='text/javascript'>
+/* <![CDATA[ */
+(function() {
+	var dropdown = document.getElementById( "<?php echo esc_js( $dropdown_id ); ?>" );
+	function onSelectChange() {
+		if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) {
+			document.location.href = this.options[ this.selectedIndex ].value;
+		}
+	}
+	dropdown.onchange = onSelectChange;
+})();
+/* ]]> */
+</script>
+
 		<?php } else { ?>
 		<ul>
-		<?php
-		/**
-		 * Filters the arguments for the Archives widget.
-		 *
-		 * @since 2.8.0
-		 * @since 4.9.0 Added the `$instance` parameter.
-		 *
-		 * @see wp_get_archives()
-		 *
-		 * @param array $args     An array of Archives option arguments.
-		 * @param array $instance Array of settings for the current widget.
-		 */
-		wp_get_archives( apply_filters( 'widget_archives_args', array(
-			'type'            => 'monthly',
-			'show_post_count' => $c
-		), $instance ) );
-		?>
+			<?php
+			/**
+			 * Filters the arguments for the Archives widget.
+			 *
+			 * @since 2.8.0
+			 * @since 4.9.0 Added the `$instance` parameter.
+			 *
+			 * @see wp_get_archives()
+			 *
+			 * @param array $args     An array of Archives option arguments.
+			 * @param array $instance Array of settings for the current widget.
+			 */
+			wp_get_archives(
+				apply_filters(
+					'widget_archives_args',
+					array(
+						'type'            => 'monthly',
+						'show_post_count' => $c,
+					),
+					$instance
+				)
+			);
+			?>
 		</ul>
-		<?php
+			<?php
 		}
 
 		echo $args['after_widget'];
@@ -137,10 +162,17 @@
 	 * @return array Updated settings to save.
 	 */
 	public function update( $new_instance, $old_instance ) {
-		$instance = $old_instance;
-		$new_instance = wp_parse_args( (array) $new_instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') );
-		$instance['title'] = sanitize_text_field( $new_instance['title'] );
-		$instance['count'] = $new_instance['count'] ? 1 : 0;
+		$instance             = $old_instance;
+		$new_instance         = wp_parse_args(
+			(array) $new_instance,
+			array(
+				'title'    => '',
+				'count'    => 0,
+				'dropdown' => '',
+			)
+		);
+		$instance['title']    = sanitize_text_field( $new_instance['title'] );
+		$instance['count']    = $new_instance['count'] ? 1 : 0;
 		$instance['dropdown'] = $new_instance['dropdown'] ? 1 : 0;
 
 		return $instance;
@@ -154,14 +186,20 @@
 	 * @param array $instance Current settings.
 	 */
 	public function form( $instance ) {
-		$instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') );
-		$title = sanitize_text_field( $instance['title'] );
+		$instance = wp_parse_args(
+			(array) $instance,
+			array(
+				'title'    => '',
+				'count'    => 0,
+				'dropdown' => '',
+			)
+		);
 		?>
-		<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($title); ?>" /></p>
+		<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 class="checkbox" type="checkbox"<?php checked( $instance['dropdown'] ); ?> id="<?php echo $this->get_field_id('dropdown'); ?>" name="<?php echo $this->get_field_name('dropdown'); ?>" /> <label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e('Display as dropdown'); ?></label>
+			<input class="checkbox" type="checkbox"<?php checked( $instance['dropdown'] ); ?> id="<?php echo $this->get_field_id( 'dropdown' ); ?>" name="<?php echo $this->get_field_name( 'dropdown' ); ?>" /> <label for="<?php echo $this->get_field_id( 'dropdown' ); ?>"><?php _e( 'Display as dropdown' ); ?></label>
 			<br/>
-			<input class="checkbox" type="checkbox"<?php checked( $instance['count'] ); ?> id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" /> <label for="<?php echo $this->get_field_id('count'); ?>"><?php _e('Show post counts'); ?></label>
+			<input class="checkbox" type="checkbox"<?php checked( $instance['count'] ); ?> id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" /> <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show post counts' ); ?></label>
 		</p>
 		<?php
 	}