'', 'source' => [], 'destination' => '' ] ); blocksy_assert_args($args, ['token', 'source', 'destination']); global $wp_filter; if (! isset($wp_filter[$args['destination']])) { $wp_filter[$args['destination']] = new \WP_Hook(); } foreach ($args['source'] as $source_id) { if (! isset($wp_filter[$source_id])) { continue; } $this->tokens[$args['token']][$source_id] = $wp_filter[$source_id]; } $this->tokens[$args['token']][$args['destination']] = $wp_filter[$args['destination']]->callbacks; foreach ($args['source'] as $source_id) { if (! isset($wp_filter[$source_id])) { continue; } $source_callbacks = $wp_filter[$source_id]->callbacks; foreach ($source_callbacks as $priority => $callbacks) { if (! isset($wp_filter[$args['destination']]->callbacks[$priority])) { $wp_filter[$args['destination']]->callbacks[$priority] = []; } $wp_filter[$args['destination']]->callbacks[$priority] = array_merge( $wp_filter[$args['destination']]->callbacks[$priority], $callbacks ); } $this->tokens[$args['token']][$source_id] = $wp_filter[$source_id]; unset($wp_filter[$source_id]); } } public function disable_callbacks($args = []) { $args = wp_parse_args( $args, [ 'token' => '', 'source' => [] ] ); blocksy_assert_args($args, ['token', 'source']); global $wp_filter; foreach ($args['source'] as $source_id) { if (! isset($wp_filter[$source_id])) { continue; } $this->tokens[$args['token']][$source_id] = $wp_filter[$source_id]; unset($wp_filter[$source_id]); } } public function enable_callbacks($args = []) { $args = wp_parse_args( $args, [ 'token' => '', 'source' => [] ] ); blocksy_assert_args($args, ['token', 'source']); global $wp_filter; foreach ($args['source'] as $source_id) { if (! isset($this->tokens[$args['token']][$source_id])) { continue; } $wp_filter[$source_id] = $this->tokens[$args['token']][$source_id]; unset($this->tokens[$args['token']][$source_id]); } } // For now callback rolling is not needed, but it may be needed eventually /* public function rollback_callbacks($args = []) { $args = wp_parse_args( $args, [ 'token' => '', 'source' => '', 'destination' => '' ] ); blocksy_assert_args($args, ['token', 'source', 'destination']); if ( ! isset($this->tokens[$args['token']]) || ! isset($this->tokens[$args['token']][$args['destination']]) ) { return; } global $wp_filter; foreach ($args['source'] as $source_id) { if (! isset($this->tokens[$args['token']][$source_id])) { continue; } $wp_filter[$source_id] = $this->tokens[$args['token']][$source_id]; } $wp_filter[$args['destination']]->callbacks = $this->tokens[$args['token']][$args['destination']]; } */ }