如何设置Cookie在单击某个链接时切换样式表,并将其设置为直到单击另一个特定链接?

时间:2015-06-09 作者:Foolish Coder

我有一个非常古老的网站。现在,我想让它在不改变主题和样式表的情况下响应。

要求:

无法更改主题

  • 当单击另一个“切换器链接”时,站点应加载为默认值(无响应)
  • ,因此我决定

    1. enqueueswitcher link 已单击。:链接以使网站响应enqueue 当另一个switcher link 已单击:链接以切换回默认的无响应站点header.php

      <a href="?site=mobile" class="mobile_site" id="mobile_site"><img src="http://i60.tinypic.com/dza06h.jpg" alt="switch to mobile site"></a>
      <a href="?site=desktop" class="desktop_site"><img src="http://i61.tinypic.com/2iu3vl.jpg" alt="switch to desktop site"></a>
      
      我把下面的代码放进我的functions.php

      $site=$_GET[\'site\'];
      
      if ($site == \'mobile\'){
          function responsive_css(){
              wp_enqueue_style(
                  \'wpa_custom\',
                  get_template_directory_uri() . \'/css/responsive.css\'
              );
          }
          add_action( \'wp_enqueue_scripts\', \'responsive_css\', 999 );
      }
      
      if ($site == \'desktop\'){
          function default_css(){
              wp_enqueue_style(
                  \'default_css\',
                  get_template_directory_uri() . \'/style.css\'
              );
          }
          add_action( \'wp_enqueue_scripts\', \'default_css\', 999 );
      }
      
      我添加了一个名为css 进入我的模板目录,其中包含responsive.css.

      然后

      单击mobile link (class=mobile_site) 整个网站都变得响应迅速。站点链接变为www.mysite.com/?site=mobiledesktop link (class=desktop_site) 整个站点变得无响应(默认站点加载了其默认style.css). 站点链接变为www.mysite.com/?site=desktop

    瞧。。。。!!!!

    但问题是:

    After I clicked the mobile link if I visit to other pages / posts the whole site becomes Non-responsive. It is responsive if I am in home page only (After I clicked the mobile link)

    对于其他页面和帖子,我必须单击mobile link 再次使其响应。总之,用户必须单击mobile link 每次他们访问(新)帖子/页面时,如果他们想要响应性网站。

    我意识到问题是I did not set a cookiemobile linkdesktop link 已单击。

    我参考了PHP Cookie和其他一些教程,但没有成功。

    现在要求如下(包括上述5项):

    mobile link (class="mobile_site") 单击直到desktop link(class="desktop_site") 再次单击如何使用PHP实现?

    * PLEASE do not just **down vote 说它与PHP更相关,然后询问stack overflow . 这是混合的,我在这里问。请提出建议,而不是仅仅否决投票。

    1 个回复
    最合适的回答,由SO网友:Oleg Butuzov 整理而成

    您可以使用init 设置cookie的操作,以及读取cookie的其他init操作。然而,由于它是一块饼干。。。您还需要检查GET变量。

    add_action(\'init\', \'is_it_mobile_or_desktop\', 1);
    
    function is_it_mobile_or_desktop(){
        if (isset($_GET[\'site\']) && in_array($_GET[\'site\'], array(\'mobile\', \'desktop\')) ) {
            setcookie( \'site\', $_GET[\'site\'], time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
        }
    }
    
    add_action(\'init\', \'who_am_i\', 2);
    function who_am_i(){
    
        $site = isset($_GET[\'site\']) && in_array($_GET[\'site\'], array(\'mobile\', \'desktop\')) ?  $_GET[\'site\']
                : (isset($_COOKIE[\'site\']) && in_array($_COOKIE[\'site\'], array(\'mobile\', \'desktop\'))  ? $_COOKIE[\'site\'] : \'default_case\');
    
        if ($site == \'mobile\'){
            function responsive_css(){
                wp_enqueue_style(
                    \'wpa_custom\',
                    get_template_directory_uri() . \'/css/responsive.css\'
                );
            }
            add_action( \'wp_enqueue_scripts\', \'responsive_css\', 999 );
        } else {
            function default_css(){
                wp_enqueue_style(
                    \'default_css\',
                    get_template_directory_uri() . \'/style.css\'
                );
            }
            add_action( \'wp_enqueue_scripts\', \'default_css\', 999 );
        }
    }
    

    结束

    相关推荐

    Cookies in template

    我需要根据cookies只显示一次页面的某些部分。主要问题是我只能在插件中设置cookie,挂起init操作。我已经读了20页的谷歌,这个网站,问了2个论坛,但我仍然有这个问题。任何帮助都将不胜感激!