Opened 8 years ago
Last modified 8 years ago
#44406 new defect (bug)
Mismatch in the default value of the optional replacement argument in do_action_deprecated(), apply_filters_deprecated() and _deprecated_hook()
| Reported by: | birgire | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Awaiting Review |
| Component: | General | Version: | 4.6 |
| Severity: | normal | Keywords: | |
| Cc: | Focuses: |
Description
There's a mismatch in the default value of the optional replacement argument in the functions do_action_deprecated(), apply_filters_deprecated() and _deprecated_hook().
We have:
function do_action_deprecated( ..., $replacement = false, ... ) { ... }
function apply_filters_deprecated( ..., $replacement = false, ... ) { ... }
but then on the other hand:
function _deprecated_hook( ..., $replacement = null, ... ) { ... }
containing a ! is_null( $replacement ) check.
How to fix:
I think adjusting the private function _deprecated_hook(), could be a safer route, as it's not supposed to be used by plugins or themes. Either adjust the optional input value to false, or e.g. replace ! is_null( $replacement ) with ! $replacement to handle both.
How to replicate - Example:
add_action( 'init', function() {
add_action( 'foo_action', 'foo_action_callback' );
do_action_deprecated( 'foo_action', array( '123' ), '4.9' );
remove_action( 'foo_action', 'foo_action_callback' );
} );
function foo_action_callback( $var ) {
}
Actual message:
foo_action is deprecated since version 4.9! Use instead.
Expected message:
foo_action is deprecated since version 4.9 with no alternative available.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)
I think
! empty( $replacement )is better. Because it adjustfalseandnull.Also, I think
nullis better for the default argument of the functions.Because , setting default argument
nulldoesn't affect any functions, but if we set default argumentfalse, it affectsdo_action( 'deprecated_hook_run', $hook, $replacement, $version, $message ).