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

跟对老板,待在你喜欢的气场里是非常重要的。对于一个陌生的客户来讲,销售人员要做的就是吸引客户的注意。客户不把你放在心上,你能卖出东西吗?

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

在后台插件安装界面搜索 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();

本文WordPress 统计每天登录的用户数量到此结束。战士的意志要象礁石一样坚定,战士的性格要像和风一样温柔。小编再次感谢大家对我们的支持!

您可能有感兴趣的文章
WordPress站点Gravatar头像前后台不显示的如何解决办法

WordPress主题需要支持https吗?WordPress站点如何如何实现https?

WordPress站点的页面/标签/分类URL地址如何添加.html?

WordPress站点更换了域名后数据库应该如何操作替换新旧域名?

WordPress安装在主机空间的什么目录里面?根目录在哪里?