#42412 closed defect (bug) (worksforme)
Calling get_current_user_id() and setting $current_user gives unexpected behaviour
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 4.8.3 |
Component: | Users | Keywords: | |
Focuses: | Cc: |
Description
Steps to reproduce, paste this code in functions.php
<?php if ( ! function_exists( 'wp_get_current_user' ) ) { die('The file with wp_get_current_user() has not loaded yet into memory.'); }else{ echo '----echo get_current_user_id()----</br>'; echo '$current_user global? '; echo array_key_exists('current_user', $GLOBALS)?"true</br>":"false</br>"; echo get_current_user_id() . '</br>'; echo '$current_user global? '; echo array_key_exists('current_user', $GLOBALS)?"true</br>":"false</br>"; echo get_current_user_id() . '</br>'; echo get_current_user_id() . '</br>'; echo '----echo $current_user after 1 call----</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; echo $current_user . '</br>'; echo $current_user . '</br>'; echo '----echo $current_user, 1 call each time----</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = get_current_user_id(); echo $current_user . '</br>'; echo '----echo $current_user, $current_user = 5 before each call----</br>'; $current_user = 5; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = 5; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = 5; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = 5; $current_user = get_current_user_id(); echo $current_user . '</br>'; $current_user = 5; $current_user = get_current_user_id(); echo $current_user . '</br>'; echo '----echo $current_user, $current_user = 5 NO call----</br>'; $current_user = 5; echo $current_user . '</br>'; $current_user = 5; echo $current_user . '</br>'; $current_user = 5; echo $current_user . '</br>'; $current_user = 5; echo $current_user . '</br>'; $current_user = 5; echo $current_user . '</br>'; echo '----echo $cu, 1 call each time---</br>'; $cu = get_current_user_id(); echo $cu . '</br>'; $cu = get_current_user_id(); echo $cu . '</br>'; $cu = get_current_user_id(); echo $cu . '</br>'; $cu = get_current_user_id(); echo $cu . '</br>'; echo '----echo $current_user_1, 1 call each time----</br>'; $current_user_1 = get_current_user_id(); echo $current_user_1 . '</br>'; $current_user_1 = get_current_user_id(); echo $current_user_1 . '</br>'; $current_user_1 = get_current_user_id(); echo $current_user_1 . '</br>'; $current_user_1 = get_current_user_id(); echo $current_user_1 . '</br>'; echo '----echo $current_user->ID ----</br>'; $current_user = wp_get_current_user(); echo $current_user->ID . '</br>'; $current_user = wp_get_current_user(); echo $current_user->ID . '</br>'; $current_user = wp_get_current_user(); echo $current_user->ID . '</br>'; $current_user = wp_get_current_user(); echo $current_user->ID . '</br>'; echo '----echo $current_user_obj->ID ----</br>'; $current_user_obj = wp_get_current_user(); echo $current_user_obj->ID . '</br>'; $current_user_obj = wp_get_current_user(); echo $current_user_obj->ID . '</br>'; $current_user_obj = wp_get_current_user(); echo $current_user_obj->ID . '</br>'; $current_user_obj = wp_get_current_user(); echo $current_user_obj->ID . '</br>'; }
That outputs:
----echo get_current_user_id()---- $current_user global? false 1 $current_user global? true 1 1 ----echo $current_user after 1 call---- 1 1 1 ----echo $current_user, 1 call each time---- 0 1 0 1 0 ----echo $current_user, $current_user = 5 before each call---- 0 0 0 0 0 ----echo $current_user, $current_user = 5 NO call---- 5 5 5 5 5 ----echo $cu, 1 call each time--- 0 0 0 0 ----echo $current_user_1, 1 call each time---- 0 0 0 0 ----echo $current_user->ID ---- 0 0 0 0 ----echo $current_user_obj->ID ---- 0 0 0 0
Issue in _wp_get_current_user() ?
Using php 7.0
Change History (2)
Note: See
TracTickets for help on using
tickets.
Hello @gertmeeusen. Welcome to our trac. Here are a few things that might help you.
init
hook as theUser
is already authenticated at that point. See https://codex.wordpress.org/Plugin_API/Action_Reference.You can do this by wrapping your code above inside a function e.g
my_function()
then usingadd_action( 'init', 'my_function' )
. See https://developer.wordpress.org/reference/functions/add_action/.$current_user
var. You need to do it like this.But again, it's better to use WP functions like
wp_get_current_user()
orget_current_user_id()
than the global var.See
https://developer.wordpress.org/reference/functions/wp_get_current_user/
https://developer.wordpress.org/reference/functions/get_current_user_id/
I'll be marking this as
worksforme
since trying your code ininit
hook works as intended.