diff --git src/wp-includes/widgets/class-wp-widget-media.php src/wp-includes/widgets/class-wp-widget-media.php
index c76989c873..1724b23780 100644
--- src/wp-includes/widgets/class-wp-widget-media.php
+++ src/wp-includes/widgets/class-wp-widget-media.php
@@ -34,6 +34,14 @@ abstract class WP_Widget_Media extends WP_Widget {
 	);
 
 	/**
+	 * Whether or not the widget has been registered yet.
+	 *
+	 * @since 4.8.1
+	 * @var bool
+	 */
+	protected $registered = false;
+
+	/**
 	 * Constructor.
 	 *
 	 * @since 4.8.0
@@ -87,7 +95,12 @@ abstract class WP_Widget_Media extends WP_Widget {
 	 * @since 4.8.0
 	 * @access public
 	 */
-	public function _register() {
+	public function _register_one() {
+		parent::_register_one();
+		if ( $this->registered ) {
+			return;
+		}
+		$this->registered = true;
 
 		// Note that the widgets component in the customizer will also do the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
 		add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) );
@@ -100,8 +113,6 @@ abstract class WP_Widget_Media extends WP_Widget {
 		add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) );
 
 		add_filter( 'display_media_states', array( $this, 'display_media_state' ), 10, 2 );
-
-		parent::_register();
 	}
 
 	/**
diff --git src/wp-includes/widgets/class-wp-widget-text.php src/wp-includes/widgets/class-wp-widget-text.php
index 7d149c0a0f..14dc7b38bb 100644
--- src/wp-includes/widgets/class-wp-widget-text.php
+++ src/wp-includes/widgets/class-wp-widget-text.php
@@ -17,6 +17,14 @@
 class WP_Widget_Text extends WP_Widget {
 
 	/**
+	 * Whether or not the widget has been registered yet.
+	 *
+	 * @since 4.8.1
+	 * @var bool
+	 */
+	protected $registered = false;
+
+	/**
 	 * Sets up a new Text widget instance.
 	 *
 	 * @since 2.8.0
@@ -41,15 +49,18 @@ class WP_Widget_Text extends WP_Widget {
 	 * @since 4.8.0
 	 * @access public
 	 */
-	public function _register() {
+	public function _register_one() {
+		parent::_register_one();
+		if ( $this->registered ) {
+			return;
+		}
+		$this->registered = true;
 
 		// Note that the widgets component in the customizer will also do the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
 		add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) );
 
 		// Note that the widgets component in the customizer will also do the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts().
 		add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) );
-
-		parent::_register();
 	}
 
 	/**
