diff --git wordpress.org/public_html/wp-content/plugins/theme-directory/theme-directory.php wordpress.org/public_html/wp-content/plugins/theme-directory/theme-directory.php
index e5796871c..946446aa5 100644
--- wordpress.org/public_html/wp-content/plugins/theme-directory/theme-directory.php
+++ wordpress.org/public_html/wp-content/plugins/theme-directory/theme-directory.php
@@ -1297,3 +1297,75 @@ function wporg_themes_get_current_url( $path_only = false ) {
 
 	return $link;
 }
+
+/**
+ * Add suspend bulk action
+ */
+add_action( 'current_screen', 'wporg_themes_bulk_hooks' );
+
+/**
+ * Hooks to current_screen hook, so that we have the WP_Screen defined
+ */
+function wporg_themes_bulk_hooks() {
+	add_filter( 'bulk_actions-edit-repopackage', 'wporg_themes_add_bulk_suspend_option' );
+	add_filter( 'handle_bulk_actions-edit-repopackage', 'wporg_themes_suspend_bulk_action_handler', 10, 3 );
+	add_action( 'admin_notices', 'wporg_themes_suspend_bulk_action_admin_notice' );
+}
+
+/**
+ * Add a new bulk action
+ *
+ * Add the suspend themes action
+ *
+ * @param  array $bulk_actions Array of bulk actions.
+ * @return array               Updated array of bulk actions.
+ */
+function wporg_themes_add_bulk_suspend_option( $bulk_actions ) {
+	$bulk_actions['suspend_themes'] = __( 'Suspend themes', 'wporg-themes' );
+
+	return $bulk_actions;
+}
+
+/**
+ * Add the action handler for the suspend themes action
+ *
+ * @param  string $redirect_to The redirect URL.
+ * @param  string $doaction    The action being taken.
+ * @param  array  $post_ids    The post IDs to take the action on.
+ * @return string              Redirection URL after the action.
+ */
+function wporg_themes_suspend_bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
+	if ( $doaction !== 'suspend_themes' ) {
+		return $redirect_to;
+	}
+
+	foreach ( $post_ids as $post_id ) {
+		wp_update_post(
+			array(
+				'ID'          => $post_id,
+				'post_status' => 'suspended',
+			)
+		);
+	}
+
+	$redirect_to = add_query_arg( 'bulk_suspend_themes', count( $post_ids ), $redirect_to );
+
+	return $redirect_to;
+}
+
+/**
+ * The admin notice after the suspend themes action happened.
+ */
+function wporg_themes_suspend_bulk_action_admin_notice() {
+	if ( ! empty( $_REQUEST['bulk_suspend_themes'] ) ) {
+		$suspended_themes_count = intval( $_REQUEST['bulk_suspend_themes'] );
+
+		printf( '<div id="message" class="updated notice is-dismissible"><p>' .
+			_n( '%s theme is suspended.',
+				'%s theme are suspended.',
+				$suspended_themes_count,
+				'wporg-themes'
+			) . '</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">' . __(' Dismiss this notice.', 'wporg-themes' ) . '</span></button></div>',
+			$suspended_themes_count );
+	}
+}
