【发布时间】:2011-07-17 19:27:06
【问题描述】:
我正在创建一个 wordpress 插件。我正在编写的所有功能都“挂钩”到某些 wordpress 事件中。这意味着我很难创建需要在多个函数中使用的变量。
例如:
有两个函数挂在某个地方:
Display_if_facebook_connected() {
if (Check_facebook_connected()) { return 'Yes, connected!' }
return '';
}
Display_if_facebook_connected() {
if (!Check_facebook_connected()) { return 'No, not connected!' }
return '';
}
它们都运行一个非常繁重的功能:
Check_facebook_connected() { // some heavy facebook connect stuff, return bool }
我基本上是在尝试避免让繁重的函数运行两次,因为它会产生相同的结果。
在这种情况下,执行$_COOKIE['check_facebook_connected'] = true; 然后在Display_if_facebook_connected() 中读取该变量是否安全?
安全是指用户无法查看或更改该值。由于 cookie 从未真正设置过,我认为/希望它只是在 php 代码的末尾消失。
如果有更好的方法或更好的 var 来做到这一点,我不会感到惊讶,但由于我对 php 的了解有限,我想不出任何办法。
更新: 关于会话:我不需要将值保留在多个页面上,只需加载一页。由于 Wordpress 不使用会话,我认为没有理由更改它。
我尝试了一下,问题依旧:
以下所有代码都在我的 wordpress 插件的主文件中。根据我的理解,插件文件在每次请求时都“包含”,因此每次刷新测试帖子时都会运行所有代码。
首先我创建变量:
$myplugin_connected = false;
然后我把我的函数挂在正确的地方:
add_shortcode( 'myplugin_notconnected', 'myplugin_notconnected_func' );
这基本上将myplugin_notconnected_func() 函数挂钩到 [myplugin_notconnected] 短代码中。 (shortcode 是 wordpress 帖子中的文本,在 [ ] 括号之间有一些 id。Wordpress 会在出现时加载与短代码相关联的代码。)
这是myplugin_notconnected_func():
function myplugin_notconnected_func( $atts, $content = null ) {
echo '<p>connected: ' . var_export($myplugin_connected, true) . '</p>';
return '$contents';
}
结果如下:
已连接:NULL
这就是我尝试使用 $_COOKIE 变量的原因,因为至少它们在整个 php 实例中都存在。对于缺乏连贯性,我深表歉意,我正在边学习边学习,非常感谢您的帮助!
【问题讨论】:
-
在这种情况下会话变量会不会更好?我不熟悉 WP 插件 - 但是没有记录的方法来保存插件数据吗?
-
会话由浏览器关闭而不是 cookie 结束,所以我想你需要一个会话变量来存储你的数据。
-
@joon:我想如果你能澄清你希望连接状态持续多长时间会有所帮助。
-
WP 不使用会话,在开始在 WP 上安装会话之前,我一直在探索其他可能性。