redditor
redditor

Reputation: 4266

WP echo get_user_meta single value prints 'array'

I am trying to display the line_managers's nickname of a given user_id from my WP usermeta table.

The table looks like this:

user_id 2 has the line_manager value 1

enter image description here

'user_id' 1 has the nickname value MyNicknameString

enter image description here

Desired Result

User ID: 2
Line Manager ID: 1
Line Manager Nickname: MyNicknameString

PHP

User ID: 
<?php echo bp_displayed_user_id(); ?>
<br>

Line Manager ID: 
<?php
$line_manager = get_user_meta( bp_displayed_user_id() , 'line_manager' , true );
echo $line_manager;
?>
<br>

Line Manager Nickname: 
<?php
$line_manager = get_user_meta( bp_displayed_user_id() , 'line_manager' , true );
$line_manager_nickname = get_user_meta( $line_manager , 'nickname' , true );
echo $line_manager_nickname;
?>

Current Result

User ID: 2
Line Manager ID: Array
Line Manager Nickname:

How do I correctly reference these key values?


EDIT: var_dump($line_manager) returns array data from the users table rather than the expected usermeta table. I would have expected it to print the usermeta.


EDIT 2: The following SQL works as I would expect the WP function to.

global $wpdb,$table_prefix;
$displayed_user = bp_displayed_user_id();
$line_manager_ID =  $wpdb->get_var("SELECT meta_value FROM ".$table_prefix."usermeta WHERE user_id = ".$displayed_user." AND meta_key = 'line_manager' ");
echo $wpdb->get_var("SELECT meta_value FROM ".$table_prefix."usermeta WHERE user_id = ".$line_manager_ID." AND meta_key = 'nickname' ");

Upvotes: 3

Views: 1246

Answers (1)

joshmoto
joshmoto

Reputation: 5088

Just an idea, see comments explaining a bit better what is happing here...

@redditor in your last paste bin comment you are getting the $line_manager_id too early, you need to make sure $user_meta['line_manager'][0] is set before attempting to get this id or you will get an error or warning... see my updated answer below with comments

<?php
    
// get current user id the wordpress way
// $user_id = get_current_user_id();

// get displayed user your way
$user_id = bp_displayed_user_id();

// get user meta data
$user_meta = get_user_meta($user_id);

// if we have user id
if($user_id) { ?>

    User ID: <?=$user_id?>
    <br/>

    <?php // if line manager array key and sub key 0 is set ?>    
    <?php if(isset($user_meta['line_manager'][0])) { ?>

        <?php // here it is safe to now get the line manager user meta ?> 
        <?php $lm_user_meta = get_user_meta($user_meta['line_manager'][0]); ?>

        Line Manager ID: <?=$user_meta['line_manager'][0]?>
        <br/>
        
        <?php // check line manager user meta array nickname key and sub key 0 is set ?> 
        <?php if(isset($lm_user_meta['nickname'][0])) { ?>
            
            Line Manager Nickname: <?=$lm_user_meta['nickname'][0]?>
            
        <?php } ?>

    <?php } ?>

<?php } ?>

Upvotes: 1

Related Questions