From a415c29efee45520ae252d2aa28f1083a521cd7b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:56:49 +0200 Subject: Adding upstream version 6.4.3+dfsg1. Signed-off-by: Daniel Baumann --- wp-includes/class-wp-widget-factory.php | 141 ++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 wp-includes/class-wp-widget-factory.php (limited to 'wp-includes/class-wp-widget-factory.php') diff --git a/wp-includes/class-wp-widget-factory.php b/wp-includes/class-wp-widget-factory.php new file mode 100644 index 0000000..ed719b9 --- /dev/null +++ b/wp-includes/class-wp-widget-factory.php @@ -0,0 +1,141 @@ +widgets[ spl_object_hash( $widget ) ] = $widget; + } else { + $this->widgets[ $widget ] = new $widget(); + } + } + + /** + * Un-registers a widget subclass. + * + * @since 2.8.0 + * @since 4.6.0 Updated the `$widget` parameter to also accept a WP_Widget instance object + * instead of simply a `WP_Widget` subclass name. + * + * @param string|WP_Widget $widget Either the name of a `WP_Widget` subclass or an instance of a `WP_Widget` subclass. + */ + public function unregister( $widget ) { + if ( $widget instanceof WP_Widget ) { + unset( $this->widgets[ spl_object_hash( $widget ) ] ); + } else { + unset( $this->widgets[ $widget ] ); + } + } + + /** + * Serves as a utility method for adding widgets to the registered widgets global. + * + * @since 2.8.0 + * + * @global array $wp_registered_widgets + */ + public function _register_widgets() { + global $wp_registered_widgets; + $keys = array_keys( $this->widgets ); + $registered = array_keys( $wp_registered_widgets ); + $registered = array_map( '_get_widget_id_base', $registered ); + + foreach ( $keys as $key ) { + // Don't register new widget if old widget with the same id is already registered. + if ( in_array( $this->widgets[ $key ]->id_base, $registered, true ) ) { + unset( $this->widgets[ $key ] ); + continue; + } + + $this->widgets[ $key ]->_register(); + } + } + + /** + * Returns the registered WP_Widget object for the given widget type. + * + * @since 5.8.0 + * + * @param string $id_base Widget type ID. + * @return WP_Widget|null + */ + public function get_widget_object( $id_base ) { + $key = $this->get_widget_key( $id_base ); + if ( '' === $key ) { + return null; + } + + return $this->widgets[ $key ]; + } + + /** + * Returns the registered key for the given widget type. + * + * @since 5.8.0 + * + * @param string $id_base Widget type ID. + * @return string + */ + public function get_widget_key( $id_base ) { + foreach ( $this->widgets as $key => $widget_object ) { + if ( $widget_object->id_base === $id_base ) { + return $key; + } + } + + return ''; + } +} -- cgit v1.2.3