最近有一个博客提出了比较特殊的需求。需要在保留现有主题的情况下,根据专题的内容展现不同的WP主题。
WordPress自身支持更换皮肤的功能,但是根据文章内容或者分类动态的变化皮肤目前官方并不支持。人总是懒惰的,我先在网上寻找了一番,映入眼帘的更多是主题御览插件,虽然功能基本达到了要求,但使用后发现还是有很多细节无法做到位。
障碍1:Cookie
Cookie虽然是一种十分好的方式,但插件不是Session Cookie,假设网站默认主题为A,当用户阅读了B主题的页面后没有清空Cookie,那么下次访问网站首页将采用B主题展示。这样很容易产生UI混乱。
虽然Cookie默认会在推出时清除,被意外保留的机会非常大,比如电脑断电、浏览器崩溃、强制关闭进程等等。
障碍2:分享
分享是一个比较头痛的问题,WP的文章地址是唯一的,通过文章地址很难分析出采用何种主题(需求方是按照TAG分主题的)
有了这两个麻烦的东西,现有的插件基本就无法完全达到标准。
从之前搜集的插件中寻找,有一个叫做theme-test-drive的插件【下载】最为符合需求,它没有cookie的记忆能力,仅仅是靠地址后面的参数作为判断依据。
1 2 | 原地址;http://www.alexblair.org/ 自定义地址:http://www.alexblair.org/?theme="inove" |
不过,由于这个插件没有记忆能力,如果用户在主题中随意点击链接,还是会返回默认主题。这时候只要在所在皮肤的footer.php中添加替换即可。
1 2 3 4 5 6 7 8 9 10 11 12 | <script type="text/javascript"> //这里输入主题目录名 var NowTheme=''; //枚举元素 var Obj_a = document.getElementsByTagName("a"); for (i = 0; i < Obj_a .length; i++){ //可以定义任意特征的白名单,我是以rel="nofollow" if (Obj_a[i].rel.indexOf('nofollow') ==-1){ Obj_a[i].href = '?theme=' + NowTheme; }; }; </script> |