在 php 中设置全局标志,wordpress

Setting a global flag in php, wordpress

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

我已将验证码添加到 wordpress 站点,通过在 jQuery 中向 validate-captcha.php 发出 GET 请求和 return 消息来验证该站点。很有魅力。

在 return 我触发了一个不可见的 'submit' 按钮的点击。 为了确保评论不会在没有验证码检查的情况下发布,我需要一个全局标志。我将其设置为 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.[=18 设置为 1 =]

我做错了什么?

全局变量不会在页面加载时持续存在,因此这不会起作用。

您使用 $_SESSION 的方法是正确的,但我怀疑这对您不起作用,因为您需要在设置或访问会话变量之前调用 session_start();