Make WordPress Core

Opened 6 years ago

Closed 4 years ago

Last modified 4 years ago

#42412 closed defect (bug) (worksforme)

Calling get_current_user_id() and setting $current_user gives unexpected behaviour

Reported by: gertmeeusen's profile gertmeeusen 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)

#1 @donmhico
4 years ago

  • Resolution set to worksforme
  • Status changed from new to closed

Hello @gertmeeusen. Welcome to our trac. Here are a few things that might help you.

  1. Your code above is best to be called inside the init hook as the User 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 using add_action( 'init', 'my_function' ). See https://developer.wordpress.org/reference/functions/add_action/.

  1. In you want to call the global $current_user var. You need to do it like this.
    <?php
    global $current_user;
    
    var_dump( $current_user );
    

But again, it's better to use WP functions like wp_get_current_user() or get_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 in init hook works as intended.

#2 @desrosj
4 years ago

  • Component changed from General to Users
  • Milestone Awaiting Review deleted
Note: See TracTickets for help on using tickets.