1004 | | |
1005 | | /** |
1006 | | * Backs up global variables used for actions and filters. |
1007 | | * |
1008 | | * Prevents redefinition of these globals in advanced-cache.php from accidentally |
1009 | | * destroying existing data. |
1010 | | * |
1011 | | * @since 4.6.0 |
1012 | | * @access private |
1013 | | * |
1014 | | * @global array $wp_filter Stores all filters and actions. |
1015 | | * @global array $wp_actions Stores the amount of times an action was triggered. |
1016 | | * @global array $merged_filters Merges the filter hooks using this function. |
1017 | | * @global array $wp_current_filter Stores the list of current filters with the current one last. |
1018 | | * @staticvar array $backup_globals Backed up globals. |
1019 | | * |
1020 | | * @return array the staticvar from the first time it is set. |
1021 | | */ |
1022 | | function _backup_plugin_globals( $backup = true ) { |
1023 | | global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; |
1024 | | |
1025 | | static $backup_globals = array(); |
1026 | | |
1027 | | if ( $backup ) { |
1028 | | $backup_globals = array( |
1029 | | 'backup_wp_filter' => $wp_filter, |
1030 | | 'backup_wp_actions' => $wp_actions, |
1031 | | 'backup_merged_filters' => $merged_filters, |
1032 | | 'backup_wp_current_filter' => $wp_current_filter, |
1033 | | ); |
1034 | | |
1035 | | $wp_filter = $wp_actions = array(); |
1036 | | } |
1037 | | return $backup_globals; |
1038 | | } |
1039 | | |
1040 | | /** |
1041 | | * Safely restores backed up global variables used for actions and filters. |
1042 | | * |
1043 | | * @since 4.6.0 |
1044 | | * @access private |
1045 | | * |
1046 | | * @global array $wp_filter Stores all filters and actions. |
1047 | | * @global array $wp_actions Stores the amount of times an action was triggered. |
1048 | | * @global array $merged_filters Merges the filter hooks using this function. |
1049 | | * @global array $wp_current_filter Stores the list of current filters with the current one last. |
1050 | | * @staticvar array $backup_globals Backed up globals. |
1051 | | */ |
1052 | | function _restore_plugin_globals() { |
1053 | | global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; |
1054 | | |
1055 | | $backup_globals = _backup_plugin_globals( false ); |
1056 | | |
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 | | } |
1073 | | } |
1074 | | |
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 | | } |
1088 | | } |
1089 | | |
1090 | | if ( $merged_filters !== $backup_globals['backup_merged_filters'] ) { |
1091 | | $merged_filters = array_merge_recursive( $merged_filters, $backup_globals['backup_merged_filters'] ); |
1092 | | } |
1093 | | |
1094 | | if ( $wp_current_filter !== $backup_globals['backup_wp_current_filter'] ) { |
1095 | | $wp_current_filter = array_merge_recursive( $wp_current_filter, $backup_globals['backup_wp_current_filter'] ); |
1096 | | } |
1097 | | } |