diff --git a/wp-admin/includes/theme.php b/wp-admin/includes/theme.php
index 12035e1fc9..108da0e934 100644
--- a/wp-admin/includes/theme.php
+++ b/wp-admin/includes/theme.php
@@ -653,20 +653,24 @@ function wp_prepare_themes_for_js( $themes = null ) {
 		}
 
 		$prepared_themes[ $slug ] = array(
-			'id'           => $slug,
-			'name'         => $theme->display( 'Name' ),
-			'screenshot'   => array( $theme->get_screenshot() ), // @todo multiple
-			'description'  => $theme->display( 'Description' ),
-			'author'       => $theme->display( 'Author', false, true ),
-			'authorAndUri' => $theme->display( 'Author' ),
-			'version'      => $theme->display( 'Version' ),
-			'tags'         => $theme->display( 'Tags' ),
-			'parent'       => $parent,
-			'active'       => $slug === $current_theme,
-			'hasUpdate'    => isset( $updates[ $slug ] ),
-			'hasPackage'   => isset( $updates[ $slug ] ) && ! empty( $updates[ $slug ]['package'] ),
-			'update'       => get_theme_update_available( $theme ),
-			'actions'      => array(
+			'id'             => $slug,
+			'name'           => $theme->display( 'Name' ),
+			'screenshot'     => array( $theme->get_screenshot() ), // @todo multiple
+			'description'    => $theme->display( 'Description' ),
+			'author'         => $theme->display( 'Author', false, true ),
+			'authorAndUri'   => $theme->display( 'Author' ),
+			'version'        => $theme->display( 'Version' ),
+			'tags'           => $theme->display( 'Tags' ),
+			'requires'       => $theme->display( 'Requires' ),
+			'requires_php'   => $theme->display( 'RequiresPHP' ),
+			'wp_compatible'  => is_wp_version_compatible( $theme->display( 'Requires' ) ),
+			'php_compatible' => is_php_version_compatible( $theme->display( 'RequiresPHP' ) ),
+			'parent'         => $parent,
+			'active'         => $slug === $current_theme,
+			'hasUpdate'      => isset( $updates[ $slug ] ),
+			'hasPackage'     => isset( $updates[ $slug ] ) && ! empty( $updates[ $slug ]['package'] ),
+			'update'         => get_theme_update_available( $theme ),
+			'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,
diff --git a/wp-admin/themes.php b/wp-admin/themes.php
index 082819611b..e500aebfe6 100644
--- a/wp-admin/themes.php
+++ b/wp-admin/themes.php
@@ -323,10 +323,14 @@ foreach ( $themes as $theme ) :
 
 	<?php if ( $theme['hasUpdate'] ) : ?>
 		<div class="update-message notice inline notice-warning notice-alt">
-		<?php if ( $theme['hasPackage'] ) : ?>
-			<p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p>
+		<?php if ( $theme['wp_compatible'] && $theme['php_compatible'] ): ?>
+			<?php if ( $theme['hasPackage'] ) : ?>
+				<p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p>
+			<?php else : ?>
+				<p><?php _e( 'New version available.' ); ?></p>
+			<?php endif; ?>
 		<?php else : ?>
-			<p><?php _e( 'New version available.' ); ?></p>
+			<p><?php _e( 'Version update incompatible.' ); ?></p>
 		<?php endif; ?>
 		</div>
 	<?php endif; ?>
@@ -361,10 +365,15 @@ foreach ( $themes as $theme ) :
 			/* translators: %s: Theme name. */
 			$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 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 } ?>
+			<?php if ( $theme['wp_compatible'] && $theme['php_compatible'] ): ?>
+				<a class="button activate" href="<?php echo $theme['actions']['activate']; ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></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 } ?>
+			<?php else : ?>
+				<a class="button disabled" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
+				<a class="button button-primary load-customize hide-if-no-customize disabled"><?php _e( 'Live Preview' ); ?></a>
+			<?php endif; ?>
 		<?php } ?>
 
 		</div>
@@ -491,10 +500,16 @@ if ( ! is_multisite() && current_user_can( 'edit_themes' ) && $broken_themes ) {
 	<# } #>
 
 	<# if ( data.hasUpdate ) { #>
-		<# if ( data.hasPackage ) { #>
-			<div class="update-message notice inline notice-warning notice-alt"><p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p></div>
+		<# if ( data.wp_compatible && data.php_compatible ) { #>
+			<div class="update-message notice inline notice-warning notice-alt">
+			<# if ( data.hasPackage ) { #>
+				<p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p></div>
+			<# } else { #>
+				<div class="update-message notice inline notice-warning notice-alt"><p><?php _e( 'New 	version available.' ); ?></p></div>
+			<# } #>
 		<# } else { #>
-			<div class="update-message notice inline notice-warning notice-alt"><p><?php _e( 'New version available.' ); ?></p></div>
+			<div class="notice inline notice-warning notice-alt">
+			<p><?php _e( 'Update incompatible.' ); ?></p></div>
 		<# } #>
 	<# } #>
 
@@ -528,8 +543,13 @@ if ( ! is_multisite() && current_user_can( 'edit_themes' ) && $broken_themes ) {
 				/* translators: %s: Theme name. */
 				$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 				?>
-				<a class="button activate" href="{{{ data.actions.activate }}}" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
-				<a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
+				<# if ( data.wp_compatible && data.php_compatible ) { #>
+					<a class="button activate" href="{{{ data.actions.activate }}}" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
+					<a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
+				<# } else { #>
+					<a class="button disabled" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
+					<a class="button button-primary load-customize hide-if-no-customize disabled"><?php _e( 'Live Preview' ); ?></a>
+				<# } #>
 			<# } #>
 		</div>
 	</div>
@@ -571,8 +591,18 @@ if ( ! is_multisite() && current_user_can( 'edit_themes' ) && $broken_themes ) {
 
 				<# 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.wp_compatible && data.php_compatible ) { #>
+						<h3 class="notice-title"><?php _e( 'Update Available' ); ?></h3>
+						{{{ data.update }}}
+					<# } else { #>
+						<h3 class="notice-title"><?php _e( 'Update incompatible' ); ?></h3>
+						<p><?php printf(
+								/* translators: %s: WordPress version, %s: PHP version */
+								__( 'This theme is incompatible with your current installation. This theme requires at least WordPress %s and PHP %s.' ),
+								'{{{ data.requires }}}',
+								'{{{ data.requires_php }}}'
+							); ?></p>
+					<# } #>
 				</div>
 				<# } #>
 				<p class="theme-description">{{{ data.description }}}</p>
@@ -602,10 +632,13 @@ if ( ! is_multisite() && current_user_can( 'edit_themes' ) && $broken_themes ) {
 				/* translators: %s: Theme name. */
 				$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 				?>
-				<# if ( data.actions.activate ) { #>
+				<# if ( data.actions.activate && data.wp_compatible && data.php_compatible ) { #>
 					<a href="{{{ data.actions.activate }}}" class="button activate" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
+					<a href="{{{ data.actions.customize }}}" class="button button-primary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
+				<# } else { #>
+					<a class="button disabled" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
+					<a class="button button-primary load-customize hide-if-no-customize disabled"><?php _e( 'Live Preview' ); ?></a>
 				<# } #>
-				<a href="{{{ data.actions.customize }}}" class="button button-primary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
 			</div>
 
 			<# if ( ! data.active && data.actions['delete'] ) { #>
diff --git a/wp-admin/update-core.php b/wp-admin/update-core.php
index e2696ebf62..aad673c84e 100644
--- a/wp-admin/update-core.php
+++ b/wp-admin/update-core.php
@@ -475,17 +475,36 @@ function list_theme_updates() {
 	<tbody class="plugins">
 	<?php
 	foreach ( $themes as $stylesheet => $theme ) {
-		$checkbox_id = 'checkbox_' . md5( $theme->get( 'Name' ) );
+		$checkbox_id    = 'checkbox_' . md5( $theme->get( 'Name' ) );
+		$compatible_php = is_php_version_compatible( $theme->get( 'RequiresPHP' ) );
+		$compat         = '';
+		$annotation     = '';
+		if ( ! $compatible_php && current_user_can( 'update_php' ) ) {
+			$compat .= '<br>' . __( 'This update doesn&#8217;t work with your version of PHP.' ) . '&nbsp;';
+			$compat .= sprintf(
+				/* translators: %s: URL to Update PHP page. */
+				__( '<a href="%s">Learn more about updating PHP</a>.' ),
+				esc_url( wp_get_update_php_url() )
+			);
+
+			$annotation = wp_get_update_php_annotation();
+
+			if ( $annotation ) {
+				$compat .= '</p><p><em>' . $annotation . '</em>';
+			}
+		}
 		?>
 	<tr>
 		<td class="check-column">
-			<input type="checkbox" name="checked[]" id="<?php echo $checkbox_id; ?>" value="<?php echo esc_attr( $stylesheet ); ?>" />
-			<label for="<?php echo $checkbox_id; ?>" class="screen-reader-text">
-				<?php
-				/* translators: %s: Theme name. */
-				printf( __( 'Select %s' ), $theme->display( 'Name' ) );
-				?>
-			</label>
+			<?php if ( $compatible_php ) : ?>
+				<input type="checkbox" name="checked[]" id="<?php echo $checkbox_id; ?>" value="<?php echo esc_attr( $stylesheet ); ?>" />
+				<label for="<?php echo $checkbox_id; ?>" class="screen-reader-text">
+					<?php
+					/* translators: %s: Theme name. */
+					printf( __( 'Select %s' ), $theme->display( 'Name' ) );
+					?>
+				</label>
+			<?php endif; ?>
 		</td>
 		<td class="plugin-title"><p>
 			<img src="<?php echo esc_url( $theme->get_screenshot() ); ?>" width="85" height="64" class="updates-table-screenshot" alt="" />
@@ -497,6 +516,7 @@ function list_theme_updates() {
 				$theme->display( 'Version' ),
 				$theme->update['new_version']
 			);
+			echo $compat . $annotation;
 			?>
 		</p></td>
 	</tr>
