diff --git a/src/wp-admin/includes/class-wp-plugin-install-list-table.php b/src/wp-admin/includes/class-wp-plugin-install-list-table.php
index 7823f00b70..d8bdb32727 100644
--- a/src/wp-admin/includes/class-wp-plugin-install-list-table.php
+++ b/src/wp-admin/includes/class-wp-plugin-install-list-table.php
@@ -155,6 +155,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
 			'per_page' => $per_page,
 			// Send the locale to the API so it can provide context-sensitive results.
 			'locale'   => get_user_locale(),
+			'fields'   => 'preview_link',
 		);
 
 		switch ( $tab ) {
@@ -577,6 +578,16 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
 									_x( 'Cannot Install', 'plugin' )
 								);
 							}
+							if ( isset( $plugin['preview_link'] ) && $plugin['preview_link'] ) {
+								$action_links[] = sprintf(
+									'<a class="button preview" href="%s" aria-label="%s" data-title="%s" target="_blank">%s</a>',
+									esc_url( $plugin['preview_link'] ),
+									/* translators: %s: Plugin name and version. */
+									esc_attr( sprintf( __( 'Preview %s' ), $name ) ),
+									esc_attr( $name ),
+									__( 'Preview' )
+								);
+							}
 						}
 						break;
 
diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php
index 7662076581..788189c8d9 100644
--- a/src/wp-admin/includes/plugin-install.php
+++ b/src/wp-admin/includes/plugin-install.php
@@ -518,8 +518,13 @@ function install_plugin_install_status( $api, $loop = false ) {
 		$url .= '&amp;from=' . urlencode( wp_unslash( $_GET['from'] ) );
 	}
 
+	$preview = null;
+	if ( isset( $api->preview_link ) && $api->preview_link ) {
+		$preview = $api->preview_link;
+	}
+
 	$file = $update_file;
-	return compact( 'status', 'url', 'version', 'file' );
+	return compact( 'status', 'url', 'version', 'file', 'preview' );
 }
 
 /**
@@ -897,6 +902,9 @@ function install_plugin_information() {
 						);
 					}
 				}
+				if ( $status['preview'] ) {
+					echo '<a data-slug="' . esc_attr( $api->slug ) . '" id="plugin_preview_from_iframe" class="button button-primary left" href="' . $status['preview'] . '" target="_blank">' . __( 'Preview' ) . '</a>';
+				}
 				break;
 			case 'update_available':
 				if ( $status['url'] ) {
