setcookie() 需要手动重新加载页面才能工作

setcookie() needs to manually reload the page to work

我设置了一个隐藏特定短代码内容的 cookie。我正在使用 URL (http://www.yourwebsite.com/?EmailSubscriber=true) 来触发 cookie 并将其设置为 "true"。特定代码工作正常,只是需要重新加载才能使条件生效。

这是我的代码

if ($_GET['EmailSubscriber'] == 'true') {
    setcookie('EmailSubscriber', 'true', time() + (86400 * 30 * 6), "/");
} 

这些是我制作的简码

function EmailSubscriber_function( $atts, $content = null ) {
    $atts = shortcode_atts(
        array(
            'class' => '',
        ), $atts, 'EmailSubscriber' );  

        if(isset($_COOKIE['EmailSubscriber'])) {
            return '<div id="emailSubscriber" style="padding:20px 0;"><div class="darkSec"><div class="cck tve_clearfix tve_empty_dropzone">' . do_shortcode($content) . '</div></div></div>';
        }
}
add_shortcode( 'EmailSubscriber', 'EmailSubscriber_function' );

function EmailSubscriber_function( $atts, $content = null ) {
    $atts = shortcode_atts(
        array(
            'class' => '',
        ), $atts, 'EmailSubscriber' );  

        if(isset($_COOKIE['EmailSubscriber'])) {
            return '<div id="emailSubscriber" style="padding:20px 0;"><div class="darkSec"><div class="cck tve_clearfix tve_empty_dropzone">' . do_shortcode($content) . '</div></div></div>';
        }
}
add_shortcode( 'EmailSubscriber', 'EmailSubscriber_function' );

我只需要输入这个 URL http://www.yourwebsite.com/?EmailSubscriber=true 然后当页面第一次加载时它触发条件和 show/hide 必要的内容。

如果您想立即使用 cookie,您也可以使用会话进行检查或手动保存您的 cookie:

if ($_GET['EmailSubscriber'] == 'true') {
    setcookie('EmailSubscriber', 'true', time() + (86400 * 30 * 6), "/");
    $_COOKIE["EmailSubscriber"] = 'true';
}

通过这个操作 $_COOKIE["EmailSubscriber"] = 'true';你不会真正保存 cookie,但你的脚本会认为你这样做了。