WordPress插件执行代码两次

时间:2014-12-10 作者:Cute Khan

我正在构建一个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秒内运行了两次。

我不明白为什么会这样。

2 个回复
SO网友:Otto

很简单,它加载了不止一次,因为您可能实际上向“WordPress”发出了不止一个HTTP请求。

您不应该像这样依赖插件加载,因为WordPress可以在许多不同的情况下加载,有时甚至对于单个页面视图也会多次加载。

例如,wp cron进程可以在另一个请求的后台运行,以便处理诸如计划发布、更新检查、垃圾清理和其他此类普通任务。这些HTTP请求确实会加载插件,因此插件可以在调用wp cron进程时执行操作。

主仪表板的元素(如“WordPress新闻”)使用Javascript显示。这些是后端对管理ajax例程的单独请求,这些例程加载WordPress以访问HTTP函数,然后从WordPress检索数据。组织RSS源。这些加载了大部分WordPress,包括插件。

因此,你计算的与其说是一个“访问”计数器,不如说是一个“命中”计数器,而且一次访问可能不止一次命中。如果你真的想计算访问量,你应该更有选择性地计算,忽略像后台请求这样的事情。

运行cron进程时,将定义do\\u cron

SO网友:circularsoggy

奥托的回答很好,但我只是想补充一些额外的信息。通过查看以下变量,尝试查看请求URI:

$_SERVER[\'REQUEST_URI\']
这将让您确定用户的浏览器是否发出了另一个导致wordpress再次运行的请求。

在我的情况下,此问题是由于请求。css。SASS输出css文件中包含的映射文件触发apache重新运行wordpress!

结束

相关推荐

WP_LOCALIZE_SCRIPT与WordPress中的mce_外部_plugins

我不确定这是否可能。我可以使用wp_localize_script 具有mce_external_plugins 滤器我想向tinymce插件脚本发送一个变量。例如:add_filter( \"mce_external_plugins\", array( &$this, \'add_test_plugin\' ) ); public function add_test_plugin( $plugin_array ){ global $pagenow;&#