WordPress 多套主题并存的解决方法和一些研究

最近有一个博客提出了比较特殊的需求。需要在保留现有主题的情况下,根据专题的内容展现不同的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>

Related posts

发表评论