source

현재 로그인된 사용자 목록(워드 프레스)

factcode 2023. 9. 11. 22:14
반응형

현재 로그인된 사용자 목록(워드 프레스)

현재 로그인한 사용자 목록을 표시하는 방법이 있습니까?

이상적으로 그들의 이름과 그라바타를 보여줄 것입니다.

개인적으로 session_tokens 메타 키를 사용하여 사용자가 온라인 상태인지(또는 실행 중인 세션이 있는지) 확인합니다.

$aUsers = get_users([
    'meta_key' => 'session_tokens',
    'meta_compare' => 'EXISTS'
]);

세션이 실행 중인 사용자 목록이 나타납니다.그러면 출력에 사용할 수 있습니다.

echo sprintf(
    'Users online: %s',
    implode(', ', array_map(function($oUser){
        return get_avatar( $oUser->ID, 96 ) . '<span class="username">'$oUser->display_name.'</span>';
    }, $aUsers))
);

마지막 비트의 코드를 수정하면 세션 IP 주소를 표시할 수도 있습니다.

echo sprintf(
    'Users online: %s',
    implode(', ', array_map(function($oUser){
        $aCurrentSessions = get_user_meta($oUser->ID, 'session_tokens', true);
        return get_avatar( $oUser->ID, 96 ) . '<span class="username">'$oUser->display_name.'</span> (' .
            implode('; ', array_map(function($aSession) {
                return $aSession['ip']; // only return the session ips
            }, $aCurrentSessions)) . ')';
    }, $aUsers))
);

워드프레스에는 이것을 위한 기능이 내장되어 있지 않지만, 당신은 직접 그것을 쉽게 추가할 수 있습니다.예를 들어 wp_login hook을 사용하여 각 사용자의 마지막 로그인 시간을 저장할 수 있습니다.그런 다음 최근 30분 이내에 로그인한 사용자를 온라인으로 나열할 수 있습니다.

add_action('wp_login', 'store_last_login', 10, 2);

function store_last_login($current_user) {
    global $current_user;
    get_currentuserinfo();
    $user = $current_user->user_login;
    update_user_meta($current_user->ID, 'last_login', current_time('mysql', 1));
}

그런 다음 지난 20분 이내에 로그인한 사용자(또는 선택한 기간에 상관없이)를 다음과 같은 방법으로 반향할 수 있습니다.

function list_online_users() {
$users = get_users( 'blog_id=1' );
foreach ($users as $online) {

    $getLastLogin = (get_user_meta($online->ID, 'last_login', true));
    $lastLogin = new DateTime($getLastLogin);
    $since_start = $lastLogin->diff(new DateTime(current_time('mysql', 1)));

    $minutesSinceLogin = $since_start->i;

    // this will list every user and whether they logged in within the last 30 minutes
    if ($minutesSinceLogin > 30 ) {
        echo '<li>'.$online->user_login . ' is offline </li>';
    } else { 
        echo '<li>'.$online->user_login . ' is online </li>'; 
    }

    }

}

플러그인을 사용하지 않으려면 다음 작업을 쉽게 수행할 수 있습니다.

1/ 기능에 추가합니다.사용자가 연결 또는 연결 해제할 때 사용자 메타를 추가하거나 제거하는 php 파일:

    function add_user_logged_meta(){
        $user = wp_get_current_user();
        update_user_meta($user->ID, 'asdb-loggedin', true);
    }
    // user connects
    add_action('init','add_user_logged_meta');

    function delete_user_logged_meta() {
        $user = wp_get_current_user();
        update_user_meta($user->ID, 'asdb-loggedin', false);
    }
    // user disconnects
    add_action('clear_auth_cookie', 'delete_user_logged_meta');

2/ 템플릿(functions.php에서도 함수를 만들 수 있음)에서 로그인한 모든 사용자를 표시하려면 일부 메타 쿼리 매개 변수와 함께 내장된 word press get_users()를 사용하십시오.

$loggedin_users = get_users([
    'meta_key' => 'asdb-loggedin',
    'meta_value' => '1',
    'meta_compare' => '='
]);
foreach( $loggedin_users as $loggedin_user ){
    echo $loggedin_user->user_login;

}

1)함수 뒤에 wp_users 테이블 2)에서 enum('1', '0')을 사용하여 'status'로 명명된 추가 필드에 작성합니다.php 다음 코드를 입력합니다.

<?php
function add_session_mitesh()
{
    global $wpdb;
    if(is_user_logged_in())
    {
        $user_id = get_current_user_id();
        $wpdb->query("UPDATE wp_users SET `status` = '1' WHERE `wp_users`.`ID` = $user_id;");
    }
     $user_id;
}
add_action('init','add_session_mitesh');


function delete_session_mitesh() {
global $wpdb;
    if(is_user_logged_in())
    {
        $user_id = get_current_user_id();
        $wpdb->query("UPDATE wp_users SET `status` = '0' WHERE `wp_users`.`ID` = $user_id;");
    }
 $user_id;
}
add_action('wp_logout', 'delete_session_mitesh');
?>

사용할 수 있는 현재 로그인 사용자를 나열합니다.

<?php  $users=$wpdb->get_results( 'SELECT * FROM wp_users where status='1'', 'ARRAY_A'); 
<table width="100%" border="2px" style="text-align: center;">
    <?php
    foreach( $users as $g )
    {   
    ?>
        <tr><td style="text-align: center;"> <center> <?php echo $g['user_login'] ?> </center></td>
        </tr>
    <?php } ?>
    </p>
    </table>    

다음과 같은 방법으로 현재 로그인된 사용자를 얻을 수 있습니다.

$current_user = wp_get_current_user();
echo 'Username: ' . $current_user->user_login . '<br />';
echo 'User email: ' . $current_user->user_email . '<br />';
echo 'User first name: ' . $current_user->user_firstname . '<br />';
echo 'User last name: ' . $current_user->user_lastname . '<br />';
echo 'User display name: ' . $current_user->display_name . '<br />';
echo 'User ID: ' . $current_user->ID . '<br />'; ?>

id 이 $current_user 변수는 이 변수에서 가져올 수 있는 배열 및 개체에서 모든 사용자 세부 정보를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/21928355/list-currently-logged-in-users-wordpress

반응형