在php中设置全局标志,wordpress

时间:2015-06-23 12:55:53

标签: php jquery wordpress recaptcha

我知道有很多这样的问题,我一直在尝试建议的解决方案,但它们似乎对我不起作用。

我已经在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。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

Globals不会在页面加载过程中持续存在,因此无法正常工作。

您使用$_SESSION走在正确的轨道上,但我怀疑这不适合您,因为您需要在设置或访问会话变量之前调用session_start();