Opened 12 months ago
Last modified 12 months ago
#20845 new defect (bug)
wp_set_current_user( null, "name") does not work when $current_user is already 0
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Awaiting Review |
| Component: | Users | Version: | 3.3.2 |
| Severity: | normal | Keywords: | |
| Cc: |
Description (last modified by scribu)
According to the documentation for wp_set_current_user() you can
Set $id to null and specify a name if you do not know a user's ID.
This does not work when the current user has already been set to anonymous ( ID = 0 ) since the following test returns true.
if ( isset( $current_user ) && ( $current_user instanceof WP_User ) && ( $id == $current_user->ID ) ) {
The last part of the test should be corrected to
&& ($id === $current_user->ID) )
which will ensure that the test fails when the $id parameter is null, which will allow the rest of the pluggable function to continue and set the current user to the specified $name.
This is similar to #19769.
Note: the change in 3.4 has not fixed this particular problem.
Change History (5)
comment:2
bobbingwide — 12 months ago
- Milestone changed from 3.4 to Awaiting Review
I believe bobbingwide was simply pointing out that the change in 3.4, [20410], did not fix this problem, and that it is not a regression (it was reported against 3.3.2).
comment:5
bobbingwide — 12 months ago
TRUE. I found the problem in 3.3.2 and confirmed that the latest change for 3.4 doesn't address this problem. I suspect that the problem has potentially existed for a long time but was exacerbated by more recent code that sets the current user to 0.

Note: The change in 3.4 was Revision 20410 for #20372
I tried a simple workaround; set to "admin" first.
wp_set_current_user( 1 );
wp_set_current_user( null, "workaround-for-20845" );