[wp-trac] [WordPress Trac] #64653: WP_Hook::resort_active_iterations() skips next priority when callback removes itself during execution
WordPress Trac
noreply at wordpress.org
Fri Apr 10 02:20:05 UTC 2026
#64653: WP_Hook::resort_active_iterations() skips next priority when callback
removes itself during execution
--------------------------------------+--------------------------
Reporter: mrcasual | Owner: westonruter
Type: defect (bug) | Status: reviewing
Priority: normal | Milestone: 7.1
Component: Plugins | Version:
Severity: normal | Resolution:
Keywords: has-patch has-unit-tests | Focuses:
--------------------------------------+--------------------------
Comment (by liaison):
Test code. Put above wp-includes directory.
{{{#!php
<?php
/**
* Trac #64653: Optimized minimal reproduction
*/
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
define( 'WPINC', 'wp-includes' );
require_once ABSPATH . WPINC . '/plugin.php';
echo "--- Starting Hook Test ---\n";
$executed_priorities = [];
// Priority 10
add_action( 'test_hook', function () use ( &$executed_priorities ) {
$executed_priorities[] = 10;
echo "Executed: Priority 10\n";
}, 10 );
// Priority 50
function wp_hook_bug_self_removing() {
global $executed_priorities;
$executed_priorities[] = 50;
echo "Executed: Priority 50 (removing itself...)\n";
remove_action( 'test_hook', 'wp_hook_bug_self_removing', 50 );
}
add_action( 'test_hook', 'wp_hook_bug_self_removing', 50 );
// Priority 100
add_action( 'test_hook', function () use ( &$executed_priorities ) {
$executed_priorities[] = 100;
echo "Executed: Priority 100\n";
}, 100 );
do_action( 'test_hook' );
echo "--- Test Completed ---\n";
if ( ! in_array( 100, $executed_priorities ) ) {
echo "❌ BUG REPRODUCED: Priority 100 was skipped!\n";
} else {
echo "✅ TEST PASSED: Priority 100 was executed.\n";
}
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/64653#comment:8>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list