我知道有很多这样的问题,我一直在尝试建议的解决方案,但它们似乎对我不起作用。
我已经在wordpress网站上添加了验证码,正在通过在jQuery中向validate-captcha.php
发出GET请求进行验证,并返回一条消息。像魅力一样。
返回时,我会触发一个不可见的“提交”按钮。
为了确保在没有验证码检查的情况下发布评论,我需要一个全局标志。我在validate-captcha.php
中设置它:
global $captchaFlag; //first line
...
} else {
// Handle a successful verification
global $captchaFlag; //overkill to make sure it IS global
$captchaFlag = 1;
echo ('true'.$GLOBALS['captchaFlag']); //echoes fine
}
然后在提交时,我在functions.php中设置了一个过滤器,该过滤器应该检查captchaFlag,如果flag = 1则直接提交注释或者如果flag = 0则验证验证码或者不存在:
add_filter("preprocess_comment", "verify_comment_captcha");
function verify_comment_captcha($commentdata) {
global $captchaFlag;
echo("<script>console.log('PHP: ".json_encode($captchaFlag)."');</script>");
echo("<script>console.log('PHP: ".json_encode($GLOBALS['captchaFlag'])."');</script>");
return null;
}
但在提交时回显global $captchaFlag;
或$GLOBALS['captchaFlag']
会显示该值为null
,即使它已被validate-captcha.php设置为1。
我做错了什么?
答案 0 :(得分:0)
Globals不会在页面加载过程中持续存在,因此无法正常工作。
您使用$_SESSION
走在正确的轨道上,但我怀疑这不适合您,因为您需要在设置或访问会话变量之前调用session_start();
。