WordPress.org

Make WordPress Core

Changeset 11484


Ignore:
Timestamp:
05/29/2009 04:32:20 PM (9 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.