@@ -497,7 +497,8 @@ function pg_snapshot_wordpress_hook_callbacks(string $hook_name): array {
497497 if (!isset($wp_filter[$hook_name]) || !isset($wp_filter[$hook_name]->callbacks)) {
498498 return $snapshot;
499499 }
500- foreach ($wp_filter[$hook_name]->callbacks as $priority => $callbacks) {
500+ $callbacks_by_priority = $wp_filter[$hook_name]->callbacks;
501+ foreach ($callbacks_by_priority as $priority => $callbacks) {
501502 foreach (array_keys($callbacks) as $callback_id) {
502503 $snapshot[$priority . ':' . $callback_id] = true;
503504 }
@@ -513,12 +514,10 @@ function pg_remove_new_wordpress_hook_callbacks(string $hook_name, array $before
513514 foreach ($wp_filter[$hook_name]->callbacks as $priority => $callbacks) {
514515 foreach (array_keys($callbacks) as $callback_id) {
515516 if (!isset($before[$priority . ':' . $callback_id])) {
516- unset($wp_filter[$hook_name]->callbacks[$priority][$callback_id]);
517+ $callback = $callbacks[$callback_id];
518+ if (isset($callback['function'])) remove_action($hook_name, $callback['function'], (int) $priority);
517519 }
518520 }
519- if (empty($wp_filter[$hook_name]->callbacks[$priority])) {
520- unset($wp_filter[$hook_name]->callbacks[$priority]);
521- }
522521 }
523522}
524523
@@ -528,16 +527,15 @@ function pg_defer_new_wordpress_hook_callbacks(string $hook_name, array $before)
528527 if (!isset($wp_filter[$hook_name]) || !isset($wp_filter[$hook_name]->callbacks)) {
529528 return $deferred;
530529 }
531- foreach ($wp_filter[$hook_name]->callbacks as $priority => $callbacks) {
530+ $callbacks_by_priority = $wp_filter[$hook_name]->callbacks;
531+ foreach ($callbacks_by_priority as $priority => $callbacks) {
532532 foreach ($callbacks as $callback_id => $callback) {
533533 if (isset($before[$priority . ':' . $callback_id])) {
534534 continue;
535535 }
536- $deferred[] = array('priority' => (int) $priority, 'callback' => $callback);
537- unset($wp_filter[$hook_name]->callbacks[$priority][$callback_id]);
538- }
539- if (empty($wp_filter[$hook_name]->callbacks[$priority])) {
540- unset($wp_filter[$hook_name]->callbacks[$priority]);
536+ if (isset($callback['function']) && remove_action($hook_name, $callback['function'], (int) $priority)) {
537+ $deferred[] = array('priority' => (int) $priority, 'callback' => $callback);
538+ }
541539 }
542540 }
543541 usort($deferred, static function (array $left, array $right): int { return $left['priority'] <=> $right['priority']; });
0 commit comments