WordPress 统计每天登录的用户数量

让 WordPress 统计每天登录的用户数量,可以让你对每天的用户活跃程度有一个基本的了解。使用  User Login Stat 插件就可以做到这一点。它会在后台 > 设置 > User Login Stat  显示每天登录的用户数量。

user-login-stat-wpdaxue_com

在后台插件安装界面搜索 User Login Stat 即可在线安装,或者下载 User Login Stat

认为将该统计数据放在WP仪表盘显示会好很多,会代码的朋友也可以参考下 WordPress 仪表盘小工具接口(Dashboard Widgets API)

以下是 User Login Stat 插件的全部代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<?php
/*
  Plugin Name: User Login Stats
  Plugin URI: http://tareq.weDevs.com/
  Description: Displays and monitors the user login statistics
  Author: Tareq Hasan
  Author URI: http://tareq.weDevs.com/
  Donate URI: http://tareq.weDevs.com/
  Version: 0.1
 */
 
class User_Login_Stats{
 
    private $table;
 
    function __construct() {
        global $wpdb;
 
        $this->table = $wpdb->prefix . "user_stats";
 
        register_activation_hook( __FILE__, array( &$this, 'install' ) );
        add_action( 'wp_login', array( &$this, 'login_update' ) );
        add_action( 'wp_head', array( &$this, 'check_user' ) );
        add_action( 'admin_menu', array( &$this, 'admin_menu' ) );
    }
 
    /**
     * Create the table installing the plugin
     * 
     * @global type $wpdb 
     */
    function install() {
        global $wpdb;
 
        $sql = "CREATE TABLE IF NOT EXISTS `{$this->table}` (
             `id` int(11) NOT NULL AUTO_INCREMENT,
             `date` date NOT NULL,
             `count` int(11) NOT NULL,
             KEY `id` (`id`)
            ) ENGINE=MyISAM";
 
        $wpdb->query( $sql );
    }
 
    /**
     * Run the function when the user logs in
     * 
     * If the users last login date is not today, update the visit count
     * and update the last login
     * 
     * @param type $login 
     */
    function login_update( $login ) {
        $user = get_user_by( 'login', $login );
 
        $last_login = ( isset( $user->last_login ) ) ? strtotime( $user->last_login ) : 0;
        $last_login_date = date( 'Y-m-d', $last_login );
 
        //if the user already loggedin today, skip him
        if( $last_login_date != date( 'Y-m-d', time() ) ) {
            $this->update( $user->ID );
        }
    }
 
    /**
     * Runs everytime to check if the user's last login time is more than 24 hours
     * 
     * This function runs on `wp_head` hook and works for only loggedin users
     */
    function check_user() {
        $current_user = wp_get_current_user();
 
        if( $current_user->ID ) {
            $last_login = ( isset( $current_user->last_login ) ) ? strtotime( $current_user->last_login ) : 0;
 
            $duration = 24 * 60 * 60; //24hours
            if( (time() - $last_login ) > $duration ) {
                $this->update( $current_user->ID );
            }
        }
    }
 
    /**
     * Update the database and user last login
     * 
     * If a row is already in the table, increase the count. Otherwise create 
     * a new row and store 1 as the value
     * 
     * @global type $wpdb
     * @param type $user_id 
     */
    function update( $user_id ) {
        global $wpdb;
 
        //if any rows found, increase the count, else insert new row
        $today = date( 'Y-m-d', time() );
        $row = $wpdb->get_row( "SELECT `count` FROM {$this->table} WHERE `date`='$today'" );
        if( $row ) {
            $wpdb->query( "UPDATE {$this->table} SET `count`=`count`+1 WHERE `date`='$today'" );
        } else {
            $wpdb->insert( $this->table, array(
                'date' => $today,
                'count' => 1
            ) );
        }
 
        //update user last login
        update_user_meta( $user_id, 'last_login', gmdate( 'Y-m-d H:i:s' ) );
    }
 
    /**
     * Adds the admin panel menu to the settings main menu
     */
    function admin_menu() {
        add_submenu_page( 'options-general.php', 'User Login Stats', 'User Login Stats', 'administrator', 'user_stats', array( $this, 'admin_page' ) );
    }
 
    /**
     * Displays the statistics in the admin area
     * 
     * @global type $wpdb
     * @global type $userdata 
     */
    function admin_page() {
        global $wpdb, $userdata;
 
        $pagenum = ( isset( $_GET['pagenum'] ) ) ? absint( $_GET['pagenum'] ) : 1;
        $limit = 30;
        $offset = ( $pagenum - 1 ) * $limit;
 
        $sql = "SELECT * FROM {$this->table} ORDER BY `date` DESC LIMIT $offset, $limit";
        $table = $wpdb->get_results( $sql );
 
        $total_users = count_users();
 
        //{$this->table}
        $week = $wpdb->get_var( "SELECT sum( `count` ) FROM `{$this->table}` WHERE `date` >= ( DATE_SUB( CURRENT_DATE, INTERVAL 7 DAY ) )" );
        $month = $wpdb->get_var();
        $six_month = $wpdb->get_var();
        $year = $wpdb->get_var();
        //var_dump( $total_users);
        //update_user_meta( $userdata->ID, 'last_login', '' );
        //var_dump( $userdata->last_login );
        ?>
        <div class="wrap">
            <h2><?php _e( 'User Login Statistics' ); ?></h2>
 
            <table class="widefat">
                <thead>
                    <tr valign="top">
                        <th scope="col"><?php _e( 'Date' ); ?></th>
                        <th scope="col"><?php _e( 'Count' ); ?></th>
                    </tr>
                </thead>
                <?php
                if( $table ) {
                    foreach ($table as $row) {
                        ?>
                        <tr>
                            <td><?php echo $row->date; ?></td>
                            <td><?php echo $row->count; ?></td>
                        </tr>
 
                        <?php
                    } //foreach
                } else {
                    ?>
                    <tr>
                        <td colspan="7"><?php _e( 'Nothing found' ); ?></td>
                    </tr>
                <?php } ?>
            </table>
 
        </div>
 
        <?php
        $total = $wpdb->get_var( "SELECT COUNT(`id`) FROM {$this->table}" );
        $num_of_pages = ceil( $total / $limit );
        $page_links = paginate_links( array(
            'base' => add_query_arg( 'pagenum', '%#%' ),
            'format' => '',
            'prev_text' => __( '«', 'aag' ),
            'next_text' => __( '»', 'aag' ),
            'total' => $num_of_pages,
            'current' => $pagenum
                ) );
 
        if( $page_links ) {
            echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>';
        }
    }
 
}
 
$online_stats = new User_Login_Stats();

<?php
/*
Plugin Name: User Login Stats
Plugin URI: http://tareq.weDevs.com/
Description: Displays and monitors the user login statistics
Author: Tareq Hasan
Author URI: http://tareq.weDevs.com/
Donate URI: http://tareq.weDevs.com/
Version: 0.1
*/ class User_Login_Stats{ private $table; function __construct() {
global $wpdb; $this->table = $wpdb->prefix . "user_stats"; register_activation_hook( __FILE__, array( &$this, ‘install’ ) );
add_action( ‘wp_login’, array( &$this, ‘login_update’ ) );
add_action( ‘wp_head’, array( &$this, ‘check_user’ ) );
add_action( ‘admin_menu’, array( &$this, ‘admin_menu’ ) );
} /**
* Create the table installing the plugin
*
* @global type $wpdb
*/
function install() {
global $wpdb; $sql = "CREATE TABLE IF NOT EXISTS `{$this->table}` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`count` int(11) NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM"; $wpdb->query( $sql );
} /**
* Run the function when the user logs in
*
* If the users last login date is not today, update the visit count
* and update the last login
*
* @param type $login
*/
function login_update( $login ) {
$user = get_user_by( ‘login’, $login ); $last_login = ( isset( $user->last_login ) ) ? strtotime( $user->last_login ) : 0;
$last_login_date = date( ‘Y-m-d’, $last_login ); //if the user already loggedin today, skip him
if( $last_login_date != date( ‘Y-m-d’, time() ) ) {
$this->update( $user->ID );
}
} /**
* Runs everytime to check if the user’s last login time is more than 24 hours
*
* This function runs on `wp_head` hook and works for only loggedin users
*/
function check_user() {
$current_user = wp_get_current_user(); if( $current_user->ID ) {
$last_login = ( isset( $current_user->last_login ) ) ? strtotime( $current_user->last_login ) : 0; $duration = 24 * 60 * 60; //24hours
if( (time() – $last_login ) > $duration ) {
$this->update( $current_user->ID );
}
}
} /**
* Update the database and user last login
*
* If a row is already in the table, increase the count. Otherwise create
* a new row and store 1 as the value
*
* @global type $wpdb
* @param type $user_id
*/
function update( $user_id ) {
global $wpdb; //if any rows found, increase the count, else insert new row
$today = date( ‘Y-m-d’, time() );
$row = $wpdb->get_row( "SELECT `count` FROM {$this->table} WHERE `date`=’$today’" );
if( $row ) {
$wpdb->query( "UPDATE {$this->table} SET `count`=`count`+1 WHERE `date`=’$today’" );
} else {
$wpdb->insert( $this->table, array(
‘date’ => $today,
‘count’ => 1
) );
} //update user last login
update_user_meta( $user_id, ‘last_login’, gmdate( ‘Y-m-d H:i:s’ ) );
} /**
* Adds the admin panel menu to the settings main menu
*/
function admin_menu() {
add_submenu_page( ‘options-general.php’, ‘User Login Stats’, ‘User Login Stats’, ‘administrator’, ‘user_stats’, array( $this, ‘admin_page’ ) );
} /**
* Displays the statistics in the admin area
*
* @global type $wpdb
* @global type $userdata
*/
function admin_page() {
global $wpdb, $userdata; $pagenum = ( isset( $_GET[‘pagenum’] ) ) ? absint( $_GET[‘pagenum’] ) : 1;
$limit = 30;
$offset = ( $pagenum – 1 ) * $limit; $sql = "SELECT * FROM {$this->table} ORDER BY `date` DESC LIMIT $offset, $limit";
$table = $wpdb->get_results( $sql ); $total_users = count_users(); //{$this->table}
$week = $wpdb->get_var( "SELECT sum( `count` ) FROM `{$this->table}` WHERE `date` >= ( DATE_SUB( CURRENT_DATE, INTERVAL 7 DAY ) )" );
$month = $wpdb->get_var();
$six_month = $wpdb->get_var();
$year = $wpdb->get_var();
//var_dump( $total_users);
//update_user_meta( $userdata->ID, ‘last_login’, ” );
//var_dump( $userdata->last_login );
?>
<div class="wrap">
<h2><?php _e( ‘User Login Statistics’ ); ?></h2> <table class="widefat">
<thead>
<tr valign="top">
<th scope="col"><?php _e( ‘Date’ ); ?></th>
<th scope="col"><?php _e( ‘Count’ ); ?></th>
</tr>
</thead>
<?php
if( $table ) {
foreach ($table as $row) {
?>
<tr>
<td><?php echo $row->date; ?></td>
<td><?php echo $row->count; ?></td>
</tr> <?php
} //foreach
} else {
?>
<tr>
<td colspan="7"><?php _e( ‘Nothing found’ ); ?></td>
</tr>
<?php } ?>
</table> </div> <?php
$total = $wpdb->get_var( "SELECT COUNT(`id`) FROM {$this->table}" );
$num_of_pages = ceil( $total / $limit );
$page_links = paginate_links( array(
‘base’ => add_query_arg( ‘pagenum’, ‘%#%’ ),
‘format’ => ”,
‘prev_text’ => __( ‘«’, ‘aag’ ),
‘next_text’ => __( ‘»’, ‘aag’ ),
‘total’ => $num_of_pages,
‘current’ => $pagenum
) ); if( $page_links ) {
echo ‘<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">’ . $page_links . ‘</div></div>’;
}
} } $online_stats = new User_Login_Stats();

本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript、Pascal等单词的拼写,熟悉Windows、Linux、OS X、Android、iOS、WP8等系统的开关机。

通过下面的方式来联系我们:

电邮:138762189@qq.com

联系QQ:点击这里给我发消息

官方站:www.tadke.com

※ ※ 联系请加我的企鹅号 ※※

※ ※技术支持请微信联系站长 ※※

Copyright © 2023 Tadke.com. 琼ICP备20000547号