WordPress.org

Make WordPress Core

Changeset 11484


Ignore:
Timestamp:
05/29/09 16:32:20 (6 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.