【问题标题】:Make a splash screen appear only on first visit in Wordpress仅在首次访问 Wordpress 时显示初始屏幕
【发布时间】:2013-09-16 01:29:01
【问题描述】:

我正在尝试仅在有人第一次访问 Wordpress 网站时才显示启动画面。 我对 PHP 了解不多,但设置和读取 cookie 似乎是一种简单的方法,因此我将其添加到 header.php

<?php if ( !isset($_COOKIE['accessed']) ) { 
    setcookie('accessed', 'yes', time() + (86400 * 30)); // 30 days
?>
    <script>
        // Some code
    </script>
<?php 
    } 
?>

脚本运行,但 cookie 从未设置,因此它在每次访问时运行...

我在某个地方读到了你无法使用 PHP 在同一页面上设置和读取 cookie,但如果这是真的,那么我真的不知道我应该如何实现它。

任何提示将不胜感激!

【问题讨论】:

  • 用户不喜欢闪屏
  • 我也没有,但客户坚持要一个。所以至少我想通过不再显示它来减少它的烦人。
  • 我认为教育客户是你的工作。

标签: php wordpress cookies setcookie


【解决方案1】:

您需要在发送标头之前发送 cookie。

在 Wordpress 中,如果您只是将该代码放入主题 html 中,它将不起作用。

你需要在你的functions.php文件中做这样的事情

function checkAccessed(){
        if ( !isset($_COOKIE['accessed']) ) { 
            setcookie('accessed', 'yes', time() + 3600*24*30); 
            define("ACCESSED", false);
        }else{
            define("ACCESSED", true);
        }
}
add_action("init", "checkAccessed");

然后在你的主题 html..

<?php if(!ACCESSED){ ?>
  <script></script>
<?php } ?>

【讨论】:

    【解决方案2】:

    cookie 可能是路径 cookie。所以基本上那个cookie只会被发送到一个页面。

    你有萤火虫吗?如果您确实尝试使用“Cookies”选项卡进行检查。然后,您可以使用“网络”选项卡仔细检查 cookie 是否实际上是由用户的浏览器发送的。

    试试这个,改变时间的计算 - 不确定它是否会有所不同,但这就是我计算 30 天的方式:

    <?php if ( !isset($_COOKIE['accessed']) ) { 
    setcookie('accessed', 'yes', time() + 3600*24*30); // 30 days
    ?>
        <script>
        // Some code
        </script>
    <?php 
        } 
    ?>
    

    【讨论】:

    • 尝试暂时删除带有 // 注释的 !isset 行。只是为了测试。
    • 另外,我相信您的 setcookie 函数落后 30 天可能会导致问题,只是注意到了这一点。
    • 我尝试发表评论但没有任何变化。 30 days 部分实际上是在我的代码中注释的,我在这里复制时搞砸了。
    • 尝试编辑时间计算,见上面的代码。不确定这是否是个问题,但这就是我在代码中使用它的方式。
    • 不...我只是单独尝试了这个并且它有效,所以它必须与 Wordpress 的工作方式有关。无论如何感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多