Ticket #36819: 36819.5.diff
File 36819.5.diff, 4.9 KB (added by , 8 years ago) |
---|
-
tests/phpunit/tests/actions.php
332 332 * @ticket 36819 333 333 */ 334 334 function test_backup_plugin_globals_returns_filters() { 335 $backup = _backup_plugin_globals( );335 $backup = _backup_plugin_globals( true ); 336 336 $this->assertArrayHasKey( 'backup_wp_filter', $backup ); 337 337 $this->assertArrayHasKey( 'backup_wp_actions', $backup ); 338 338 $this->assertArrayHasKey( 'backup_wp_current_filter', $backup ); … … 343 343 * @ticket 36819 344 344 */ 345 345 function test_backup_plugin_globals_returns_filters_from_first_time_called() { 346 $backup = _backup_plugin_globals( );346 $backup = _backup_plugin_globals( true ); 347 347 348 348 $a = new MockAction(); 349 349 $tag = rand_str(); 350 350 351 351 add_action($tag, array(&$a, 'action')); 352 352 353 $new_backup = _backup_plugin_globals( );353 $new_backup = _backup_plugin_globals( false ); 354 354 $this->assertEquals( $backup, $new_backup ); 355 355 } 356 356 … … 361 361 global $wp_actions; 362 362 $original_actions = $wp_actions; 363 363 364 _backup_plugin_globals( );364 _backup_plugin_globals( true ); 365 365 366 366 $wp_actions = array(); 367 367 … … 378 378 global $wp_filter; 379 379 $original_filter = $wp_filter; 380 380 381 $backup = _backup_plugin_globals( );381 $backup = _backup_plugin_globals( true ); 382 382 383 383 $a = new MockAction(); 384 384 $tag = rand_str(); -
src/wp-settings.php
83 83 */ 84 84 if ( WP_CACHE && apply_filters( 'enable_loading_advanced_cache_dropin', true ) ) { 85 85 // For an advanced caching plugin to use. Uses a static drop-in because you would only want one. 86 _backup_plugin_globals( );86 _backup_plugin_globals( true ); 87 87 WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' ); 88 88 _restore_plugin_globals(); 89 89 } -
src/wp-includes/plugin.php
1019 1019 * 1020 1020 * @return array the staticvar from the first time it is set. 1021 1021 */ 1022 function _backup_plugin_globals( ){1022 function _backup_plugin_globals( $backup = true ) { 1023 1023 global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; 1024 1024 1025 1025 static $backup_globals = array(); 1026 1026 1027 if ( empty( $backup_globals )) {1027 if ( $backup ) { 1028 1028 $backup_globals = array( 1029 1029 'backup_wp_filter' => $wp_filter, 1030 1030 'backup_wp_actions' => $wp_actions, 1031 1031 'backup_merged_filters' => $merged_filters, 1032 1032 'backup_wp_current_filter' => $wp_current_filter, 1033 1033 ); 1034 }; 1034 1035 $wp_filter = $wp_actions = array(); 1036 } 1035 1037 return $backup_globals; 1036 1038 } 1037 1039 … … 1047 1049 * @global array $wp_current_filter Stores the list of current filters with the current one last. 1048 1050 * @staticvar array $backup_globals Backed up globals. 1049 1051 */ 1050 function _restore_plugin_globals() {1052 function _restore_plugin_globals() { 1051 1053 global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; 1052 1054 1053 $backup_globals = _backup_plugin_globals( );1055 $backup_globals = _backup_plugin_globals( false ); 1054 1056 1055 if ( $wp_filter !== $backup_globals['backup_wp_filter'] ){ 1056 $wp_filter = array_merge_recursive( $wp_filter, $backup_globals['backup_wp_filter'] ); 1057 if ( empty( $wp_filter ) ) { 1058 $wp_filter = $backup_globals['backup_wp_filter']; 1059 } else { 1060 $added_filters = $wp_filter; 1061 $wp_filter = $backup_globals['backup_wp_filter']; 1062 1063 foreach ( $added_filters as $tag => $callback_groups ) { 1064 // Loop through callback groups. 1065 foreach ( $callback_groups as $priority => $callbacks ) { 1066 1067 // Loop through callbacks. 1068 foreach ( $callbacks as $cb ) { 1069 add_filter( $tag, $cb['function'], $priority, $cb['accepted_args'] ); 1070 } 1071 } 1072 } 1057 1073 } 1058 1074 1059 if ( $wp_actions !== $backup_globals['backup_wp_actions'] ){ 1060 $wp_actions = array_merge_recursive( $wp_actions, $backup_globals['backup_wp_actions'] ); 1075 if ( empty ( $wp_actions ) ) { 1076 $wp_actions = $backup_globals['backup_wp_actions']; 1077 } else { 1078 $run_actions = $wp_actions; 1079 $wp_actions = $backup_globals['backup_wp_actions']; 1080 1081 foreach( $run_actions as $action => $count ) { 1082 if ( ! isset( $wp_actions[ $action ] ) ) { 1083 $wp_actions[ $action ] = 0; 1084 } 1085 1086 $wp_actions[ $action ] += $count; 1087 } 1061 1088 } 1062 1089 1063 if ( $merged_filters !== $backup_globals['backup_merged_filters'] ) {1090 if ( $merged_filters !== $backup_globals['backup_merged_filters'] ) { 1064 1091 $merged_filters = array_merge_recursive( $merged_filters, $backup_globals['backup_merged_filters'] ); 1065 1092 } 1066 1093 1067 if ( $wp_current_filter !== $backup_globals['backup_wp_current_filter'] ) {1094 if ( $wp_current_filter !== $backup_globals['backup_wp_current_filter'] ) { 1068 1095 $wp_current_filter = array_merge_recursive( $wp_current_filter, $backup_globals['backup_wp_current_filter'] ); 1069 1096 } 1070 1097 }