【问题标题】:How to load a different front page in Wordpress if a cookie is set?如果设置了 cookie,如何在 Wordpress 中加载不同的首页?
【发布时间】:2011-11-30 23:21:53
【问题描述】:

我试图弄清楚我将如何编写函数或其他东西,以便 Wordpress 将根据 cookie 向用户显示 2 个不同的页面。 如果设置了 cookie,他们会看到不同的首页。两个页面都必须是 wordpress,即可以从 wordpress 编辑,我只想根据是否设置 cookie 来更改 page_id

  1. 如果用户之前没有访问过网站,请设置 Cookie
  2. 给他看博客
  3. 如果 cookie 已设置,则显示用户 page_id=9

例如,如果设置了 cookie,他们会看到 page_id=9,如果没有设置 cookie,他们会看到 blog。无需用户注册,只是设置 PHP cookie 时的随意重定向

即使在谷歌搜索后我也找不到以下内容。

【问题讨论】:

    标签: php wordpress cookies redirect


    【解决方案1】:

    将 放在页眉顶部或索引页中

    if ( isset( $_COOKIE['cookie'] ) ) {
        header( "Location: /?page_id=9" );
    }
    else {
        setcookie(...);
    }
    

    检查cookie,如果存在则重定向,否则设置cookie

    注意:这仅适用于模板页面,例如,您的默认(登陆页面)模板是“主页”,将此代码放在您的主页模板中。 它在根目录下的 header.php 或 index.php 中不起作用

    【讨论】:

    • 另一件事,确保在输出任何 html 之前进行重定向。否则重定向会失败。
    • Wordpress 继续尝试重定向到博客网址,即使我在上面做了。它进入无限循环if ( !isset( $_COOKIE['cookie'] ) ) { ?> <script> top.location.href ="http://localhost/Wordpress_Work/nota/welcome-2/"; </script> <?php } else { setcookie("cookie","set", time()+3600*24); }
    • 当他建议您执行 php 重定向时,您正在执行 javascript 重定向。设置 href 属性与更改标头不同。就像在我的回答中一样,您只需要为首页执行此代码,或者检查它是否是首页。 if ($_SERVER['PHP_SELF'] == '' ) 或类似的东西。你可能需要做点小事。
    【解决方案2】:

    您可以执行 javascript 重定向。未经测试,但这应该有效。来自Quirksmode 的 Cookie 参考。

    createCookie('beenhere', '1', 1);
    if (readCookie('beenhere') == '1' && window.location.pathname == '' ) {
       window.location = window.location.hostname + "/page_id=9"
    }
    
    function createCookie(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    }
    
    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }
    

    【讨论】:

    • 我可能会用 php 做这个,但我的 js 技能更好。我相信有人也会加入 php 解决方案。
    • 这会让 wordpress 进入无限循环
    • 您必须在所有页面上都包含 javascript,而不仅仅是首页。您需要检查您是否在首页。查看我的代码更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2016-03-15
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多