Make WordPress Core

Changeset 11484


Ignore:
Timestamp:
05/29/2009 04:32:20 PM (17 years ago)
Author:
ryan
Message:

Fix widget unregister back-compat. fixes #9952

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/widgets.php

    r11450 r11484  
    327327
    328328        function _register_widgets() {
     329                global $wp_registered_widgets;
    329330                $keys = array_keys($this->widgets);
    330                 foreach ( $keys as $key )
     331                $registered = array_keys($wp_registered_widgets);
     332                $registered = array_map('_get_widget_id_base', $registered);
     333
     334                foreach ( $keys as $key ) {
     335                        // don't register new widget if old widget with the same id is already registered
     336                        if ( in_array($this->widgets[$key]->id_base, $registered, true) ) {
     337                                unset($this->widgets[$key]);
     338                                continue;
     339                        }
     340
    331341                        $this->widgets[$key]->_register();
     342                }
    332343        }
    333344}
     
    367378 */
    368379$_wp_sidebars_widgets = array();
     380
     381/**
     382 * Private
     383 */
     384 $_wp_deprecated_widgets_callbacks = array(
     385        'wp_widget_pages',
     386        'wp_widget_pages_control',
     387        'wp_widget_calendar',
     388        'wp_widget_calendar_control',
     389        'wp_widget_archives',
     390        'wp_widget_archives_control',
     391        'wp_widget_links',
     392        'wp_widget_meta',
     393        'wp_widget_meta_control',
     394        'wp_widget_search',
     395        'wp_widget_recent_entries',
     396        'wp_widget_recent_entries_control',
     397        'wp_widget_tag_cloud',
     398        'wp_widget_tag_cloud_control',
     399        'wp_widget_categories',
     400        'wp_widget_categories_control',
     401        'wp_widget_text',
     402        'wp_widget_text_control',
     403        'wp_widget_rss',
     404        'wp_widget_rss_control',
     405        'wp_widget_recent_comments',
     406        'wp_widget_recent_comments_control'
     407 );
    369408
    370409/* Template tags & API functions */
     
    556595 */
    557596function wp_register_sidebar_widget($id, $name, $output_callback, $options = array()) {
    558         global $wp_registered_widgets;
     597        global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates, $_wp_deprecated_widgets_callbacks;
    559598
    560599        $id = strtolower($id);
     
    562601        if ( empty($output_callback) ) {
    563602                unset($wp_registered_widgets[$id]);
     603                return;
     604        }
     605
     606        $id_base = _get_widget_id_base($id);
     607        if ( in_array($output_callback, $_wp_deprecated_widgets_callbacks, true) && !is_callable($output_callback) ) {
     608                if ( isset($wp_registered_widget_controls[$id]) )
     609                        unset($wp_registered_widget_controls[$id]);
     610
     611                if ( isset($wp_registered_widget_updates[$id_base]) )
     612                        unset($wp_registered_widget_updates[$id_base]);
     613
    564614                return;
    565615        }
     
    632682 */
    633683function wp_register_widget_control($id, $name, $control_callback, $options = array()) {
    634         global $wp_registered_widget_controls, $wp_registered_widget_updates;
     684        global $wp_registered_widget_controls, $wp_registered_widget_updates, $wp_registered_widgets, $_wp_deprecated_widgets_callbacks;
    635685
    636686        $id = strtolower($id);
    637         $update_id = preg_replace( '/-[0-9]+$/', '', $id );
     687        $id_base = _get_widget_id_base($id);
    638688
    639689        if ( empty($control_callback) ) {
    640690                unset($wp_registered_widget_controls[$id]);
    641                 unset($wp_registered_widget_updates[$update_id]);
     691                unset($wp_registered_widget_updates[$id_base]);
     692                return;
     693        }
     694
     695        if ( in_array($control_callback, $_wp_deprecated_widgets_callbacks, true) && !is_callable($control_callback) ) {
     696                if ( isset($wp_registered_widgets[$id]) )
     697                        unset($wp_registered_widgets[$id]);
     698
    642699                return;
    643700        }
     
    661718        $wp_registered_widget_controls[$id] = $widget;
    662719
    663         if ( isset($wp_registered_widget_updates[$update_id]) )
     720        if ( isset($wp_registered_widget_updates[$id_base]) )
    664721                return;
    665722
     
    668725
    669726        unset($widget['width'], $widget['height'], $widget['name'], $widget['id']);
    670         $wp_registered_widget_updates[$update_id] = $widget;
     727        $wp_registered_widget_updates[$id_base] = $widget;
    671728}
    672729
     
    838895                        if ( is_array($widgets) ) {
    839896                                foreach ( $widgets as $widget ) {
    840                                         if ( ( $callback && isset($wp_registered_widgets[$widget]['callback']) && $wp_registered_widgets[$widget]['callback'] == $callback ) || ( $id_base && preg_replace( '/-[0-9]+$/', '', $widget ) == $id_base ) ) {
     897                                        if ( ( $callback && isset($wp_registered_widgets[$widget]['callback']) && $wp_registered_widgets[$widget]['callback'] == $callback ) || ( $id_base && _get_widget_id_base($widget) == $id_base ) ) {
    841898                                                if ( !$widget_id || $widget_id == $wp_registered_widgets[$widget]['id'] )
    842899                                                        return $sidebar;
     
    11981255 * @return void
    11991256 **/
    1200 
    12011257function the_widget($widget, $instance = array(), $args = array()) {
    12021258        global $wp_widget_factory;
     
    12151271        $widget_obj->widget($args, $instance);
    12161272}
     1273
     1274/**
     1275 * Private
     1276 */
     1277function _get_widget_id_base($id) {
     1278        return preg_replace( '/-[0-9]+$/', '', $id );
     1279}
Note: See TracChangeset for help on using the changeset viewer.