A better way to get stats

时间:2011-12-12 作者:21zna9

我不是在寻找一个具体的答案,而是一个大致的方向。

最近,我决定制作自己的统计插件。我知道外面有很多,但我想做我自己的。我想,这有多难?只需创建一个表,记录IP,并在每次页面刷新时将数据存储在表中。

我的问题是,这些数据似乎太高了。我已经在一批PR为1的测试网站上部署了我的插件,该插件显示了数千次访问,我知道不会有太多的独特之处。

以下是整个插件:https://gist.github.com/1469300

这是我的process visitor函数。

/** 
 * Process visitor
 * 
 * Checks whether used is "logged" or not, 
 * Adds the user to the unique table if not logged,
 * adds a hit using the user_id if she is logged
 * 
*/
function vsp_process_visitor() { 
    global $wpdb; 
    $visits_table = $wpdb->prefix . "vsp_visits";

    if ( vsp_visitor_logged_in() ) { 
        vsp_update_count(); 
    }

    if ( !vsp_visitor_logged_in() ) {
        vsp_new_record( $visits_table ); 
    }
}
下面是检查会话是否已设置。

/** 
 * Checks user state
 * 
 * Checks whether a user session is set
 * Logged in if set
 * 
*/
function vsp_visitor_logged_in() { 
    $logged_in = false; 
    if ( isset( $_SESSION[ \'vsp_user\' ] ) ) { 
        $logged_in = true; 
    }
    return $logged_in; 
}
下面是插入数据的函数。

/** 
 * Creates new unique and hit
 * 
 * Inserts data into the unique table and the 
 * hits table, if allowed. 
 * 
*/
function vsp_new_record( $table ) { 
    $ip = get_ip(); 
    global $wpdb; 
    $hits_table = $wpdb->prefix . "vsp_hits";

    /* 
        Insert data into the visitors table 
    */ 
        $data = array ( \'ip\' => $ip ); 
        if ( valid_time($table) ) { 
            $wpdb->insert ( $table, $data ); 
        }
        $userID = $wpdb->get_var( \'select `id` from \' . $table . \' where `ip` = "\' . $ip . \'" order by `id` desc limit 1;\');
        $_SESSION[ \'vsp_user\' ] = $userID;


    /* 
        Insert data into the hits table
    */

        $data = array( \'visit_id\' => $userID );
        if ( valid_time($hits_table) ) { 
            $wpdb->insert ( $hits_table, $data ); 
        }       
}
代码在刷新时执行。我的问题是,当搜索机器人访问我的网站时,它是否会“触发”页面刷新,并在我的统计数据库中创建一个表,从而扭曲我的结果。

应用程序逻辑

用户来到站点问题:会话是否已设置?如果否,则使用用户的IP创建会话,并添加hit和UNIQUE如果是,则使用用户的IP添加hit

我错过了什么吗?

1 个回复
SO网友:EAMann

这里有一个非常大的问题-您正在使用$_SESSION.

默认情况下,WordPress不使用会话变量。所以isset( $_SESSION[\'vsp_user\'] ) 将始终返回false 因为WP没有跟踪事情。

为了在WP中启用会话,还需要进行一些额外的更改和挂钩。为了让您开始,以下是一些资源:

一旦你真正打开了会话,你应该在统计跟踪中看到更少的“误报”。

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s