Plugins: Add a current_priority()
method to WP_Hook
.
This allows plugins to determine the currently running priority of a filter. Fixes #39007. git-svn-id: https://develop.svn.wordpress.org/trunk@39430 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
4db36030e9
commit
5ff3f14d78
@ -351,6 +351,22 @@ final class WP_Hook implements Iterator, ArrayAccess {
|
||||
$this->nesting_level--;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current priority level of the currently running iteration of the hook.
|
||||
*
|
||||
* @since 4.7.0
|
||||
* @access public
|
||||
*
|
||||
* @return int|false If the hook is running, return the current priority level. If it isn't running, return false.
|
||||
*/
|
||||
public function current_priority() {
|
||||
if ( false === current( $this->iterations ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return current( current( $this->iterations ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes filters set up before WordPress has initialized to WP_Hook objects.
|
||||
*
|
||||
|
@ -347,4 +347,37 @@ class Tests_Filters extends WP_UnitTestCase {
|
||||
|
||||
$this->assertSame( $val, apply_filters_deprecated( 'tests_apply_filters_deprecated', array( $val ), '4.6' ) );
|
||||
}
|
||||
|
||||
private $current_priority;
|
||||
/**
|
||||
* @ticket 39007
|
||||
*/
|
||||
public function test_current_priority() {
|
||||
add_action( 'test_current_priority', array( $this, '_current_priority_action' ), 99 );
|
||||
do_action( 'test_current_priority' );
|
||||
remove_action( 'test_current_priority', array( $this, '_current_priority_action' ), 99 );
|
||||
|
||||
$this->assertSame( 99, $this->current_priority );
|
||||
}
|
||||
|
||||
public function _current_priority_action() {
|
||||
global $wp_filter;
|
||||
$this->current_priority = $wp_filter[ current_filter() ]->current_priority();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 39007
|
||||
*/
|
||||
public function test_other_priority() {
|
||||
add_action( 'test_current_priority', array( $this, '_other_priority_action' ), 99 );
|
||||
do_action( 'test_current_priority' );
|
||||
remove_action( 'test_current_priority', array( $this, '_other_priority_action' ), 99 );
|
||||
|
||||
$this->assertSame( false, $this->current_priority );
|
||||
}
|
||||
|
||||
public function _other_priority_action() {
|
||||
global $wp_filter;
|
||||
$this->current_priority = $wp_filter[ 'the_content' ]->current_priority();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user