WordPress技巧:解决冲突 插件主题不打架

* WordPress / # , , , , / 2008年12月16日 / 37条评论

使用 WordPress 的过程可以说就是不断更换插件、主题的过程,可以说:世界因 WordPress 而美丽, WordPress 因扩展(插件、主题)而动人。同时,使用插件的方法不仅仅是安装独立插件,也可以通过主题内置的功能实现插件的效果。但有些时候,比如说 sofish 童鞋制作的“sofish牌主题”喜欢在主题中内置的翻页功能,同时如果我们也安装并启用了 WP-PageNavi 这个插件,就会发生这个冲突。在本文中,NetPuter 将告诉你如何和解这个冲突。

为什么需要在主题中内置功能实现插件效果

对主题制作者来说

  1. 可以极大地丰富主题的功能,可以方便做出自己想要的效果了。
  2. 阿瓦说:减少Function Hook,因为所有的插件都是Hook的方法,比较消耗CPU(不过如果你有Cache就好一些)。
  3. ……你觉得呢?

对主题使用者来说

  1. Prower说:使用主题时就不用为插件应该怎么添加、设置而发愁了。
  2. 减少后台使用的插件,提高 WordPress 运行速度(真的么?)。
  3. ……你觉得呢?

插件和主题之间为什么会产生冲突

就拿 sofish 童鞋的新作“Anjing”来说。如果要在页面中使用翻页效果,需要调用 wp_pagenavi() 这个过程函数。但当插件(WP-PageNavi)和主题(Anjing)都同时定义了这个名字的过程时,冲突就产生了,然后就是你一拳,我一脚,然后……(感觉解释得很生硬,好像说错了)

如何解决这个冲突

既然知道了冲突是因为同名的过程而产生的,那么解决这个问题就变得非常容易了——没错,只需要把插件或者主题中实现同个功能的那个过程改掉就行啦!鉴于插件相对于主题来说升级频率更高一些,为了方便,我们选择对主题进行修改。

要想在主题中实现某些功能,需要修改的是 functions.php 这个文件,WordPress 说它叫做“模板函数”。打开有冲突的主题中的这个文件,然后根据提示找到产生冲突的过程函数,比如同时启用了 WP-PageNavi 和 Anjing ,在主题预览的时候就会出现类似这样的一段话:

Fatal error: Cannot redeclare wp_pagenavi() (previously declared in F:\PHPnow\htdocs\wp-content\plugins\wp-pagenavi\wp-pagenavi.php:80) in F:\PHPnow\htdocs\wp-content\themes\Anjing_sofished\functions.php on line 99

OK,发现目标!冲突的幕后黑手就在 functions.php 的第 99 行啦,可是打开一看,只是一个“}”。不要失望,根据 PHP 语法顺藤摸瓜向上乱摸就会看到——“ function wp_pagenavi{ ”是的,就是这一段。

解决插件和主题之间的冲突

对于主题使用者来说

直接把这一段 function 过程函数删掉保存就可以了。

对于主题制作者来说

为了更好的兼容性,你只需要把这段 function 过程函数改名就可以啦,比如说把“wp_pagenavi”改成“sofish_pagenavi ”(sofish 童鞋专用插件?),然后到调用这个 function 过程函数的地方把“<?php wp_pagenavi(); ?>”改成“<?php sofish_pagenavi(); ?>”就可以啦!

对于追求玩美的主题制作者来说

当然咯,为了不要让已经启用了的 WP-PageNavi 被浪费,你完全可以在调用“wp_pagenavi”的地方这样写:

1
2
3
4
5
6
7
8
<?php if(function_exists('wp_pagenavi')) { 
	wp_pagenavi();
} elseif(function_exists('sofish_pagenavi')) {
	sofish_pagenavi();
} else { ?>
	<div class="alignleft"><?php next_posts_link('&laquo; Older Entries') ?></div>
	<div class="alignright"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
<?php } ?>

看到了么? WP-PageNavi 和 Anjing 握手和解了诶!

欢迎订阅 OrzDream ,也欢迎关注我的 Twitter @NetPuter ~ :-)
分享这篇文章 或者围观评论 或者直接发表评论
Notify
任平生 发表于 2008-12-16 18:10

自己作主题,自己用,嘿嘿~~~

Notify
bwskyer 发表于 2008-12-16 18:23

晚修回来有问题请教, 为什么我的Trackback失效了, 郁闷中!

Notify
默然 发表于 2008-12-16 23:19

弟弟,我看不懂啊。囧個。

Notify
美容减肥 发表于 2008-12-17 05:06

WORDPRESS很强大的说

Notify
锐风 发表于 2008-12-17 08:29

地址里的 "plugins-with-themes-peaceful" 貌似拼写错误吧.. 应该是 adv 才对.. 不是 adj ..

Notify
underone 发表于 2008-12-17 10:57

:)~

Notify
NetPuter 发表于 2008-12-17 12:26

@锐风, 是呢?这个标题我也是死硬憋出来的,这么说的话就是 peacefully 咯~但是为了邪恶的SEO,还是不改鸟^^

Notify
NetPuter 发表于 2008-12-17 12:41

@bwskyer, 可以具体说说么(via Mail or GTalk).

Notify
popdo 发表于 2008-12-17 13:55

方法不错哈!在做主题的时候的确用的上!

Notify
xiaorsz 发表于 2008-12-17 14:32

很不错的文章,学习了!

Notify
大学生乱弹琴 发表于 2008-12-17 17:29

只停留在该主题的阶段,对于向主题中嵌入插件,以后再学习~
高二的朋友,了不起啊!加油!

Notify
Rui Shen 发表于 2008-12-18 12:17

说的有道理!

Notify
NetPuter 发表于 2008-12-18 12:38

@默然, 纯技术的东西,- -,看来还也要弄弄Bus的说~

Notify
都知道 发表于 2008-12-18 14:02

真不错,有道理

Notify
雪深 发表于 2008-12-18 14:27

很好 学习了

Notify
aunsen 发表于 2008-12-18 14:35

值得收藏!

Notify
SUNJIAN 发表于 2008-12-18 16:17

还没打过架 暂时不理它

Notify
哇资讯博 发表于 2008-12-18 17:37

呵呵..收藏.留着日后用WP.用..

Notify
花果山寨 发表于 2008-12-18 20:51

好方法,一个条件语句就可以解决了!

Notify
sfox 发表于 2008-12-18 21:51

在主题中内置功能实现插件效果的确不错,但如果更换主题后还想要那些效果的话就挺麻烦了 >_<

Notify
NetPuter 发表于 2008-12-18 23:29

@SUNJIAN, 不打则已,一打惊人!

Notify
NetPuter 发表于 2008-12-18 23:30

@sfox, 对滴,不过不妨考虑下换主题时不换 function.php 文件.但是这样 Sidebar 那里的定义就要修改咯!

Notify
醉倚西风 发表于 2008-12-19 11:52

好东西 哈哈

Notify
fqch 发表于 2008-12-20 03:31

细致~~学习下!~

Notify
housne 发表于 2008-12-22 01:05

三种条件都被你用到了,wordpress condition 的确很好用。

Notify
NetPuter 发表于 2008-12-22 12:32

@housne, 准确来说,应该是 PHP 的选择判断很好用,其实几乎每种语言都有这玩意儿~

Notify
Showfom 发表于 2008-12-23 23:34

来拜访一下

Notify
小墨 发表于 2008-12-24 11:22

现在2.7中的一些功能都还没发挥出来啊~~需要改动代码

Notify
十二星座 发表于 2008-12-24 13:20

呵呵,学习了,保不齐那天出错了~~

Notify
gowers 发表于 2008-12-24 15:47

哈哈,评论不少。我的主题一般写的很干净,要是插件需要在主题中加东西,我一般标注起来。目前还没发现与主题有冲突的插件,顶多是CSS的问题。这些调整下就好了

Notify
NetPuter 发表于 2008-12-24 23:14

@gowers, 嗯,干净的代码的确是一个好习惯!

Notify
ice 发表于 2008-12-31 17:19

功能越复杂冲突的可能心越大!

Notify
NetPuter 发表于 2008-12-31 18:59

@ice, 这就需要主题制作者谨慎咯~

Notify
中国石油杂志 发表于 2009-01-18 15:44

关键是要选个好主题
有得主题做的很花哨,其实里面代码一塌糊涂

Notify
Sean 发表于 2009-04-21 13:53

突然踩到 我博客第一位留言者的站了 呵呵~~

PrettyBlogs!