我正在构建一个WordPress插件,遇到了一个意想不到的问题,我的插件代码运行了两次。
请查看我的插件代码:
/* Plugin Name: plugin name
Plugin URI:
Description: Descript
Version: 1.0
Author: Author
Author URI:
License: GPLv2 or later
*/
if ( ! defined( \'ABSPATH\' ) ) {
exit; // Exit if accessed directly
}
require_once(dirname(__FILE__) . \'/lib/visit_stats.php\');
这是我的访问统计数据。php代码:
// Current wordpress user id
$userid = 3;
// Getting visit value from user meta
$oldvisitdata = get_user_meta($userid, "visits", true);
// For example if it\'s returning 3
// Now increasing the old visits value by 1
$newvisit = $oldvisitdata + 1;
// Now update the meta
update_user_meta($userid, \'visits\', $newvisit);
当我们检索值时,它应该是4,但实际上是5,这意味着当I+1时,它在旧值上加2。我想这只是因为脚本运行了两次。
我做了一个测试来确认它,下面是时间的输出:<date=12:36:34 am> <date=12:36:41am>
. 当我打开我的网站时,我的插件应该只执行一次代码,但它执行了两次,因为相差7秒。我的代码在7秒内运行了两次。
我不明白为什么会这样。
SO网友:Otto
很简单,它加载了不止一次,因为您可能实际上向“WordPress”发出了不止一个HTTP请求。
您不应该像这样依赖插件加载,因为WordPress可以在许多不同的情况下加载,有时甚至对于单个页面视图也会多次加载。
例如,wp cron进程可以在另一个请求的后台运行,以便处理诸如计划发布、更新检查、垃圾清理和其他此类普通任务。这些HTTP请求确实会加载插件,因此插件可以在调用wp cron进程时执行操作。
主仪表板的元素(如“WordPress新闻”)使用Javascript显示。这些是后端对管理ajax例程的单独请求,这些例程加载WordPress以访问HTTP函数,然后从WordPress检索数据。组织RSS源。这些加载了大部分WordPress,包括插件。
因此,你计算的与其说是一个“访问”计数器,不如说是一个“命中”计数器,而且一次访问可能不止一次命中。如果你真的想计算访问量,你应该更有选择性地计算,忽略像后台请求这样的事情。
运行cron进程时,将定义do\\u cron运行AJAX请求时,如果要通过admin AJAX系统执行AJAX,则将定义DOING\\u AJAX。然而,请注意,许多插件和主题使用它们自己的对WordPress的回调系统,并且像这样可能不容易识别因此,您可以忽略计数器中的点击。但实际上,您仍然会从其他插件和主题中获得“错误”计数的增加。因此,您应该改为不计算插件加载,而是计算您想要监视的特定WordPress操作挂钩。