WordPress.org

Make WordPress Core

Ticket #39693: 39693.12.diff

File 39693.12.diff, 2.3 KB (added by obenland, 4 months ago)
  • src/wp-includes/widgets.php

     
    11471147                } 
    11481148        } 
    11491149 
    1150  
    11511150        // Discard invalid, theme-specific widgets from sidebars. 
    11521151        $sidebars_widgets = _wp_remove_unregistered_widgets( $sidebars_widgets, $registered_widgets_ids ); 
    11531152        $sidebars_widgets = wp_map_sidebars_widgets( $sidebars_widgets ); 
     
    12141213                if ( in_array( $sidebar, $existing_sidebars, true ) ) { 
    12151214                        $new_sidebars_widgets[ $sidebar ] = $existing_sidebars_widgets[ $sidebar ]; 
    12161215                        unset( $existing_sidebars_widgets[ $sidebar ] ); 
    1217                 } else { 
     1216                } else if ( ! array_key_exists( $sidebar, $new_sidebars_widgets ) ) { 
    12181217                        $new_sidebars_widgets[ $sidebar ] = array(); 
    12191218                } 
    12201219        } 
  • tests/phpunit/tests/widgets.php

     
    962962        } 
    963963 
    964964        /** 
     965         * Tests for orphaned widgets being moved into inactive widgets. 
     966         * 
     967         * @covers retrieve_widgets() 
     968         */ 
     969        function test_retrieve_widgets_move_orphaned_widgets_to_inactive() { 
     970                global $sidebars_widgets; 
     971 
     972                wp_widgets_init(); 
     973                $this->register_sidebars( array( 'sidebar-1', 'sidebar-2', 'sidebar-3', 'wp_inactive_widgets' ) ); 
     974 
     975                $sidebars_widgets = array( 
     976                        'sidebar-1' => array( 'tag_cloud-1' ), 
     977                        'sidebar-2' => array( 'text-1' ), 
     978                        'wp_inactive_widgets' => array( 'search-2', 'archives-2' ), 
     979                        'orphaned_widgets_1'  => array( 'calendar-1' ), 
     980                ); 
     981 
     982                retrieve_widgets(); 
     983 
     984                $this->assertInternalType( 'array', $sidebars_widgets ); 
     985 
     986                foreach ( $sidebars_widgets as $widgets ) { 
     987                        $this->assertInternalType( 'array', $widgets ); 
     988                } 
     989 
     990                // 6 default widgets + 1 orphaned calendar widget = 7. 
     991                $this->assertCount( 7, $sidebars_widgets['wp_inactive_widgets'] ); 
     992                $this->assertContains( 'calendar-1', $sidebars_widgets['wp_inactive_widgets'] ); 
     993                $this->assertArrayNotHasKey( 'orphaned_widgets_1', $sidebars_widgets ); 
     994 
     995                // Sidebar_widgets option was updated. 
     996                $this->assertEquals( $sidebars_widgets, wp_get_sidebars_widgets() ); 
     997        } 
     998 
     999        /** 
    9651000         * Test _wp_remove_unregistered_widgets. 
    9661001         * 
    9671002         * @covers _wp_remove_unregistered_widgets()