在php中设置全局标志,wordpress


Setting a global flag in php, wordpress

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

我已经将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();