diff --git a/src/wp-admin/css/themes.css b/src/wp-admin/css/themes.css
index 2b26a75f49..79c70fada8 100644
--- a/src/wp-admin/css/themes.css
+++ b/src/wp-admin/css/themes.css
@@ -688,7 +688,8 @@ body.folded .theme-browser ~ .theme-overlay .theme-wrap {
 	line-height: inherit;
 }
 
-.theme-overlay .theme-author a {
+.theme-overlay .theme-author a,
+.theme-overlay .theme-autoupdate a {
 	text-decoration: none;
 }
 
diff --git a/src/wp-admin/includes/theme.php b/src/wp-admin/includes/theme.php
index 2e8e0172d4..1420b91e6c 100644
--- a/src/wp-admin/includes/theme.php
+++ b/src/wp-admin/includes/theme.php
@@ -652,6 +652,12 @@ function wp_prepare_themes_for_js( $themes = null ) {
 			);
 		}
 
+		$$wp_auto_update_themes = get_site_option( 'wp_auto_update_themes', array() );
+		$is_autoupdated_enabled = null;
+		if ( in_array( $slug, $wp_auto_update_themes, true ) ) {
+			$is_autoupdated_enabled = true;
+		}
+
 		$prepared_themes[ $slug ] = array(
 			'id'           => $slug,
 			'name'         => $theme->display( 'Name' ),
@@ -666,10 +672,12 @@ function wp_prepare_themes_for_js( $themes = null ) {
 			'hasUpdate'    => isset( $updates[ $slug ] ),
 			'hasPackage'   => isset( $updates[ $slug ] ) && ! empty( $updates[ $slug ]['package'] ),
 			'update'       => get_theme_update_available( $theme ),
+			'autoupdated'  => $is_autoupdated_enabled,
 			'actions'      => array(
 				'activate'  => current_user_can( 'switch_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=activate&amp;stylesheet=' . $encoded_slug ), 'switch-theme_' . $slug ) : null,
 				'customize' => $customize_action,
 				'delete'    => current_user_can( 'delete_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=delete&amp;stylesheet=' . $encoded_slug ), 'delete-theme_' . $slug ) : null,
+				'autoupdate' => current_user_can( 'update_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=autoupdate&amp;stylesheet=' . $encoded_slug ), 'autoupdate-theme_' . $slug ) : null,
 			),
 		);
 	}
diff --git a/src/wp-admin/themes.php b/src/wp-admin/themes.php
index 244f573ce6..005401e263 100644
--- a/src/wp-admin/themes.php
+++ b/src/wp-admin/themes.php
@@ -53,6 +53,32 @@ if ( current_user_can( 'switch_themes' ) && isset( $_GET['action'] ) ) {
 
 		wp_redirect( admin_url( 'themes.php?resumed=true' ) );
 		exit;
+	} elseif ( 'autoupdate' == $_GET['action'] ) {
+		check_admin_referer( 'autoupdate-theme_' . $_GET['stylesheet'] );
+		$theme = wp_get_theme( $_GET['stylesheet'] );
+		$slug = $theme->get_stylesheet();
+
+		if ( ! current_user_can( 'update_themes' ) ) {
+			wp_die(
+				'<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' .
+				'<p>' . __( 'Sorry, you are not allowed to enable automatic update for themes.' ) . '</p>',
+				403
+			);
+		}
+
+		$wp_auto_update_themes = get_site_option( 'wp_auto_update_themes', array() );
+		if ( ! in_array( $slug, $wp_auto_update_themes, true ) ) {
+			$autoupdate_action    = 'enable';
+			$wp_auto_update_themes[] = $slug;
+		} else {
+			$autoupdate_action    = 'disable';
+			$wp_auto_update_themes = array_diff( $wp_auto_update_themes, array( $slug ) );
+		}
+
+		update_site_option( 'wp_auto_update_themes', $wp_auto_update_themes );
+
+		wp_redirect( admin_url( 'themes.php?autoupdated=' . $autoupdate_action ) );
+		exit;
 	} elseif ( 'delete' == $_GET['action'] ) {
 		check_admin_referer( 'delete-theme_' . $_GET['stylesheet'] );
 		$theme = wp_get_theme( $_GET['stylesheet'] );
@@ -228,6 +254,15 @@ if ( ! validate_current_theme() || isset( $_GET['broken'] ) ) {
 	?>
 	<div id="message6" class="error"><p><?php _e( 'Theme could not be resumed because it triggered a <strong>fatal error</strong>.' ); ?></p></div>
 	<?php
+} elseif ( isset( $_GET['autoupdated'] ) ) {
+	$wp_auto_update_themes = get_site_option( 'wp_auto_update_themes', array() );
+	$autoupdate_notice  = __( 'The selected theme won’t update automatically anymore.' );
+	if ( 'enable' === $_GET['autoupdated'] ) {
+		$autoupdate_notice = __( 'The selected theme will now update automatically.' );
+	}
+	?>
+	<div id="message7" class="updated notice is-dismissible"><p><?php echo $autoupdate_notice; ?></p></div>
+	<?php
 }
 
 $ct = wp_get_theme();
@@ -359,6 +394,16 @@ foreach ( $themes as $theme ) :
 			$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 			?>
 			<a class="button activate" href="<?php echo $theme['actions']['activate']; ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
+			<?php
+			/* translators: %s: Theme name. */
+			$aria_label_enable  = sprintf( _x( 'Enable automatic update for %s', 'theme' ), '{{ data.name }}' );
+			$aria_label_disable = sprintf( _x( 'Disable automatic update for %s', 'theme' ), '{{ data.name }}' );
+			?>
+			<# if ( data.autoupdated ) { #>
+				<a class="button autoupdate" href="{{{ data.actions.autoupdate }}}" aria-label="<?php echo $aria_label_disable; ?>"><?php _e( 'Disable auto update' ); ?></a>
+			<# } else { #>
+				<a class="button autoupdate" href="{{{ data.actions.autoupdate }}}" aria-label="<?php echo $aria_label_enable; ?>"><?php _e( 'Enable auto update' ); ?></a>
+			<# } #>
 			<?php if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { ?>
 				<a class="button button-primary load-customize hide-if-no-customize" href="<?php echo $theme['actions']['customize']; ?>"><?php _e( 'Live Preview' ); ?></a>
 			<?php } ?>
@@ -562,11 +607,34 @@ if ( ! is_multisite() && current_user_can( 'edit_themes' ) && $broken_themes ) {
 					printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' );
 					?>
 				</p>
-
+				<p class="theme-autoupdate">
+					<?php
+					/* translators: %s: Theme name. */
+					$aria_label_enable  = sprintf( _x( 'Enable automatic update for %s', 'theme' ), '{{ data.name }}' );
+					$aria_label_disable = sprintf( _x( 'Disable automatic update for %s', 'theme' ), '{{ data.name }}' );
+					?>
+					<# if ( data.autoupdated ) { #>
+						<a href="{{{ data.actions.autoupdate }}}" aria-label="<?php echo $aria_label_disable; ?>"><span class="dashicons dashicons-update" aria-hidden="true"></span> <?php _e( 'Disable automatic updates' ); ?></a>
+					<# } else { #>
+						<a href="{{{ data.actions.autoupdate }}}" aria-label="<?php echo $aria_label_enable; ?>"><span class="dashicons dashicons-update" aria-hidden="true"></span> <?php _e( 'Enable automatic updates' ); ?></a>
+					<# } #>
+				</p>
 				<# if ( data.hasUpdate ) { #>
 				<div class="notice notice-warning notice-alt notice-large">
 					<h3 class="notice-title"><?php _e( 'Update Available' ); ?></h3>
 					{{{ data.update }}}
+					<# if ( data.autoupdated ) { #>
+						<?php
+						$next_update_time = wp_next_scheduled( 'wp_version_check' );
+						$time_to_next_update = human_time_diff( intval( $next_update_time ) );
+						$autoupdate = sprintf(
+							/* translators: Time until the next update. */
+							__( 'Automatic update scheduled in %s.' ),
+							$time_to_next_update
+						);
+						?>
+						<p class="theme-autoupdate-enabled"><?php echo $autoupdate; ?></p>
+					<# } #>
 				</div>
 				<# } #>
 				<p class="theme-description">{{{ data.description }}}</p>
diff --git a/src/wp-admin/update-core.php b/src/wp-admin/update-core.php
index 2093201149..a4d5eb022b 100644
--- a/src/wp-admin/update-core.php
+++ b/src/wp-admin/update-core.php
@@ -478,8 +478,23 @@ function list_theme_updates() {
 
 	<tbody class="plugins">
 	<?php
+	$wp_auto_update_themes = get_site_option( 'wp_auto_update_themes', array() );
+
 	foreach ( $themes as $stylesheet => $theme ) {
 		$checkbox_id = 'checkbox_' . md5( $theme->get( 'Name' ) );
+
+		$autoupdate = '';
+		if ( in_array( $stylesheet, $wp_auto_update_themes, true ) ) {
+			$next_update_time = wp_next_scheduled( 'wp_version_check' );
+			$time_to_next_update = human_time_diff( intval( $next_update_time ) );
+			$autoupdate = ' <p class="theme-autoupdate-enabled">';
+			$autoupdate .= sprintf(
+				/* translators: Time until the next update. */
+				__( 'Automatic update scheduled in %s.' ),
+				$time_to_next_update
+			);
+			$autoupdate .= '</p> ';
+		}
 		?>
 	<tr>
 		<td class="check-column">
@@ -501,6 +516,7 @@ function list_theme_updates() {
 				$theme->display( 'Version' ),
 				$theme->update['new_version']
 			);
+			echo $autoupdate;
 			?>
 		</p></td>
 	</tr>
diff --git a/src/wp-includes/update.php b/src/wp-includes/update.php
index dfb27b2aad..65844317e8 100644
--- a/src/wp-includes/update.php
+++ b/src/wp-includes/update.php
@@ -813,6 +813,15 @@ if ( ( ! is_main_site() && ! is_network_admin() ) || wp_doing_ajax() ) {
 	return;
 }
 
+function wp_auto_update_theme( $update, $item ) {
+	$$wp_auto_update_themes = get_site_option( 'wp_auto_update_themes', array() );
+	if ( in_array( $item->theme, $wp_auto_update_themes, true ) ) {
+		return true;
+	} else {
+		return $update;
+	}
+}
+
 add_action( 'admin_init', '_maybe_update_core' );
 add_action( 'wp_version_check', 'wp_version_check' );
 
@@ -831,5 +840,6 @@ add_action( 'wp_update_themes', 'wp_update_themes' );
 add_action( 'update_option_WPLANG', 'wp_clean_update_cache', 10, 0 );
 
 add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' );
+add_filter( 'auto_update_theme', 'wp_auto_update_theme', 10, 2 );
 
 add_action( 'init', 'wp_schedule_update_checks' );
