我知道有很多这样的问题,我一直在尝试建议的解决方案,但它们似乎对我不起作用。
我已经将captcha添加到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或不存在,则验证captcha:
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-catcha.php已经将其设置为1。
我做错了什么?
全局参数不会在页面加载之间持久存在,因此这是不起作用的。
使用$_SESSION
是正确的,但我怀疑这对您不起作用,因为在设置或访问会话变量之前需要调用session_start();
。