워드프레스 사이트에 로그인한 회원 목록을 출력하려면 한 명의 회원이 로그인할 때 워드프레스가 데이터베이스에 생성하는 메타 데이터 필드를 기준으로 정의할 수 있다.
회원의 메타데이터 테이블 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>';
}
}
출력할 회원 데이터를 추가하고, 스타일 정의를 위한 마크업 등 무엇이든 원하는 대로 변경해도 된다
'워드프레스' 카테고리의 다른 글
저장소 플러그인 사용하지 않고 워드프레스 사이트 공사중 상태 알리기 (0) | 2024.05.29 |
---|---|
공유 웹호스팅에서 워드프레스 유료테마 데모 임포트나 사용 문제가 있을 때 (0) | 2024.05.29 |
워드프레스 TinyMCE 에디터에 버튼 추가하기 (7) | 2024.05.28 |