当用户打开任何帖子时计算帖子浏览量

时间:2013-03-13 作者:Adi

我想当任何用户打开帖子时post view. 目前我使用的自定义函数是

<?php setPostViews(get_the_ID()); ?>
但问题是,当用户刷新页面时,它也会计算post view. 因此,如何停止在页面刷新时添加视图。

3 个回复
SO网友:Marc Dingena

阻止这种情况的一种方法是记住该访问者是否在最后x分钟内看到过此页面。您可以通过多种方式解决这一问题:

使用cookie保存访客IP使用会话就我个人而言,我发现仅使用会话计算页面有点愚蠢。

Cookie是一个很好的解决方案,如果您想在一段时间后重新计算同一用户的数量(即使是页面刷新),也可以设置过期时间。但也许你不想因此而给访问者带来饼干(还有European regulations on cookies).

保存IP地址并非万无一失(访问者可以使用代理服务器或ISP分配的动态IP地址),但对于简单的计数器来说,它仍然是一个很好的解决方案。因为您已经有了一个计算用户数的功能,所以您可以在计算时简单地添加他们的IP地址。

如果您希望此IP日志记录在特定时间后过期,就像Cookie一样,您还需要在添加此IP地址时添加时间戳。然后可以做两件事:

计数器脚本可以检查日志中的时间戳,并忽略超过x分钟的条目cronjob 对于从日志中删除早于x分钟的条目的单独脚本如果您的日志增长很快,最好使用后者。

SO网友:NatWeb Solutions

您有两种选择:

在会话中存储用户的ip地址

if($_SESSION[\'last_ip_address\']!= $_SESSION[\'REMOTE_ADDR\']) :
    setPostViews(get_the_ID());
    $_SESSION[\'last_ip_address\'] = $_SESSION[\'REMOTE_ADDR\'];
endif;
仅当ip地址与上次存储的地址不同时,此操作才会启动您的功能。您可以对Cookie执行同样的操作:

if($_COOKIE[\'last_ip_address\']!= $_SESSION[\'REMOTE_ADDR\']) :
    setPostViews(get_the_ID());
    $setcookie("last_ip_address", $_SESSION[\'REMOTE_ADDR\']);
endif;
除此之外,您还可以执行许多不同的检查,您可以设置一小时后过期的cookie并检查它是否存在,您还可以比较用户的浏览器。根据您希望的准确度,您应该使用一种或多种方法来确保准确度。就个人而言,仅仅是计算访客的会议应该做得很好。其他方法通常用于“投票”之类的事情,以防止双重投票。

SO网友:lippoliv

“统计帖子浏览量”的正确方法实际上是不手动统计,但例如,使用PIWIK/Google Analytics跟踪访问者,然后通过该工具的API读取URL的查看时间并显示结果。

这真的比手动计数更容易。

结束

相关推荐

Query_Posts()与Get_Posts()多个循环

我有一个模板,最初只有一个循环,它使用query\\u posts,我使用相同的方法又添加了两个循环,但是在阅读了allot关于这些的内容后,我得出结论,我将停止使用它,每个人都反对使用它。original query_posts loop (latest posts)<?php if ( !is_front_page() && tfuse_options(PREFIX.\'_pagination_portfolio\') ){ $cat = get_query_va