Make WordPress Core

Opened 9 years ago

Closed 23 months ago

#14881 closed defect (bug) (wontfix)

do_action should not pass empty string by default

Reported by: nacin Owned by:
Milestone: Priority: normal
Severity: normal Version:
Component: Plugins Keywords: has-patch
Focuses: Cc:
PR Number:

Description (last modified by nacin)

function test( $a = true ) {
   var_dump( $a );
add_action( 'test', 'test' );
add_action( 'test', 'test', 10, 0 );
do_action( 'test' );

Second example is bool(true) as expected, but the first is a zero-length string.

In this case, since do_action() is not passing any arguments, then no arguments should be passed to test() -- even if by default, one argument gets passed.

The issue here is how do_action() is defined: function do_action( $tag, $arg = '' );. There's our zero-length string. Of note, apply_filters() does not have this same issue.

The solution looks something like what I have attached. Has yet to be benchmarked.

Of note, this does not appear to have any direct implications for passing all args by default, as proposed in #14671, but I wanted to reference it anyway.

Attachments (1)

14881.diff (1.0 KB) - added by nacin 9 years ago.

Download all attachments as: .zip

Change History (14)

9 years ago

#1 @nacin
9 years ago

  • Description modified (diff)

#2 @hakre
9 years ago

Please take not of this ticket as well: #14789

#3 @hakre
9 years ago

Related: #14671 - Deprecate the "accepted args" argument in add_filter() and add_action()

#4 @nacin
9 years ago

  • Milestone changed from Awaiting Review to 3.1

#5 @nacin
9 years ago

  • Keywords 3.2-early added
  • Milestone changed from 3.1 to Future Release

#7 @mnelson4
4 years ago

Just encountered this gotcha last week.. What's the holdup? Are there plugins that depend on this bug?

#8 @kjbenk
4 years ago

Based off of your diff it seems that you are returning an empty array instead of an empty string. Would you want to return NULL instead? An empty array might confuse developers into thinking that it is actually an argument to the action. However, a NULL value is much more related to an error. Please let me know your thoughts @nacin.

Last edited 4 years ago by kjbenk (previous) (diff)

#9 @swissspidy
3 years ago

#39867 was marked as a duplicate.

#10 @tazotodua
3 years ago

will this ever be solved?
for example,we have:


function my_function($first=false){ 
    var_dump($first); exit;

it doesnt show false, instead something empty string is passed from the action... why? I think actions should not touch the arguments of functions..

#11 @pavlo.opanasenko
23 months ago

The bug is still valid and there is a patch by @nacin to fix it.
Any objections on doing so?

#12 @dd32
23 months ago

I'm not sure we can actually change this.

there's bound to be plugins which rely upon this behaviour, hooking into multiple things, etc.

#13 @johnbillion
23 months ago

  • Keywords 3.2-early removed
  • Milestone Future Release deleted
  • Resolution set to wontfix
  • Status changed from new to closed

It would be nice to fix this, but this ship sailed alongside #14671.

Note: See TracTickets for help on using tickets.