본문 바로가기
워드프레스

현재 로그인한 워드프레스 회원 정보를 출력하기

by 사용남 2024. 5. 30.

워드프레스 사이트에 로그인한 회원 목록을 출력하려면 한 명의 회원이 로그인할 때 워드프레스가 데이터베이스에 생성하는 메타 데이터 필드를 기준으로 정의할 수 있다.

회원의 메타데이터 테이블 session_tokens

워드프레스는 회원이 로그인할 때 데이터베이스 `{prefix}_usermeta` 테이블에 회원 아이디(ID)를 기준으로 `session_tokens` 필드를 생성한다.

‘토큰(token)’, ‘만료시각’, ‘아이피’, ‘사용자 에이전트’, ‘로그인 시각’을 저장하는데, 다음과 같다.

## _usermeta 테이블의 session_tokens

Array
(
    [7ac0dda4afa7ff21c3fff32bf80af910ffa10088735cce2f636c06eca15dc30d] => Array
        (
            [expiration] => 1717168353
            [ip] => 1.33.55.63
            [ua] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
            [login] => 1716995553
        )

)

따라서, `{prefix}_usermeta` 테이블을 조회하여 `session_tokens` 필드가 있는 회원만 구한다면 쉽게 현재 로그인 사용자를 출력할 수 있다. 다음처럼 `get_users` 함수를 사용하여 해당 필드가 존재하는 회원 데이터를 구한다.

$users = get_users( array(
    'meta_key' => 'session_tokens',
    'meta_compare' => 'EXISTS'
) );

회원 정보 출력

다음은, `get_users` 함수로 얻은 각 회원의 특정 오브젝트를 출력하는 것인데, 출력 필드와 값을 확인하여 최종 결과에 어떤 데이터를 출력할 것인지 결정하는 데 힌트를 얻을 수 있다. 

if ( $users ) {
    foreach ( $users as $user ) {
        echo '<pre>' . print_r( get_user_meta( $user->ID, 'session_tokens', true ), true ) . '</pre>'; // session_tokens 메타 필드 값 출력
        echo '<pre>' . print_r( $user, true ) . '</pre>'; // 회원의 전체 오브젝트 출력
        echo '<pre>' . print_r( $user->ID, true ) . '</pre>'; // 회원 아이디(ID)만 출력
        echo '<pre>' . print_r( $user->display_name, true ) . '</pre>'; // 회원의 프런트 출력 이름 출력
    }
}

이 글에서는 간단하게 회원의 `display_name`을 출력하는데, 다음처럼 간단하게 정의할 수 있다.

if ( $users ) {
    echo '<ul>';
        foreach ( $users as $user ) {

            $user_id = $user->ID;
            $user_name = $user->display_name;
            $user_avatar = get_avatar( $user_id, 32 );

            //echo '<li>' . $user_avatar . $user_name . '</li>'; //아바타 포함
            echo '<li>' . $user_name . '</li>';
        }
    echo '</ul>';
}

템플릿 태그

함수로 만들어 템플릿 파일에 직접 추가하여 사용하는 것이 좋다. 약간의 추가 코드로 shortcode, 위젯에 사용할 수도 있으나 별로 재미없다.

/**
 * 사이트에 로그인한 회원 목록 출력
 */

function wpcms890_current_login_user() {
    $users = get_users( array(
        'meta_key' => 'session_tokens',
        'meta_compare' => 'EXISTS'
    ) );

    if ( $users ) {
        echo '<ul>';
            foreach ( $users as $user ) {

                $user_id = $user->ID;
                $user_name = $user->display_name;
                $user_avatar = get_avatar( $user_id, 32 );

                //echo '<li>' . $user_avatar . $user_name . '</li>'; //아바타 포함
                echo '<li>' . $user_name . '</li>';
            }
        echo '</ul>';
    }
}

출력할 회원 데이터를 추가하고, 스타일 정의를 위한 마크업 등 무엇이든 원하는 대로 변경해도 된다