网站建立很久了,插件增增渐渐、主题修修改改,折腾了无数次,也做过不少个性化的定制了。现在所用的主题是在Headless这个Wordpress2.x时代主题的基础之上制作的,作者早已停止更新,对3.x的很多特性如目录、评论回复等多项功能均不支持,做过数次更改,大部分基本已经重写。之所以没有换成别的主题,是因为做过很多定制,懒得再迁移了。修改的次数太多,在此逐一记录以做备忘

修改与定制的总体原则有这么几个:

  1. 用尽量少的插件
  2. 尽量不动Wordpress本身的代码
  3. 在功能实现的基础上以保证性能提升速度为第一要务
  4. 不追求自己不需要的功能

在用插件

本Blog总共启用的插件只有4个,分别是:

  1. Akismet:WP自带,防垃圾
  2. Autoptimize:压缩HTML,动态去除无用空格空行和注释
  3. Google XML Sitemaps:为Google, Yahoo, Bing和Ask.com生成XML站点地图.,百度要求文件名sitemap_baidu.xml,格式是一样的,直接通过.htaccess来rewrite过来即可。示例
  4. WP-Syntax:格式高亮代码,在众多此类插件中选择了这个,主要是因为其兼容性应该是最好的,而且不需要额外加载js
  5. Dagon Design Sitemap Generator:生成站点地图(Sitemap),示例
  6. Fast Secure Contact Form:客户留言表单,支持验证码,示例
  7. IImage Browser:这是一个古老的插件,用来上传附件,而且还需要手动上传文件到wp-admin目录,用着比较习惯了,也很方便,所以一直在用。 2011/12/13:3.3版本后无法自动生成QuickTags
  8. SRG Clean Archives:生成友好的文章归档页面。示例
  9. WordPress Database Backup:数据库备份插件,支持自动定时备份。
  10. WP-Cumulus:标签云,示例
  11. Home_html插件:当发布/修改/评论时自动生成静态首页,Hook定期生成首页功能删除,代之以Cron生成
  12. DB Cache Reloaded Fix插件,效果有待观察

修改定制
带有标记的表示需要修改wp文件

  1. 2012/09/09
    取消Baidu Sitemap插件,rewrite到google sitempas
    取消SRG Clean Archives插件,用代码的方式实现
    取消IImage Browser插件,用代码的方式调用
    取消WordPress Database Backup插件,用cron调用php定期备份
    取消Dagon Desigon sitemap Generator,通过代码实现

  2. 2012/09/03
    再取消一个插件wp-clumn,使用自带wp_tag_cloud函数,加入彩色标签
    启用类Google风格的滚动条,仅适应Webkit内核浏览器

  3. 2012/08/29
    升级到3.4.1版本,引入Google网络字库,启用Open Sans字体,合并绝大部分的背景图为一张图片,取消input和textarea的背景图,使用Cron每小时定期生成静态首页
    启用home_html插件,当发布/修改/评论时自动生成静态首页,启用Cron定期每小时生成静态首页
    启用Autoptimize插件,压缩HTML
    DB Cache Reloaded Fix插件,效果有待观察

  4. 2012/01/04
    升级到3.3.1版本,增加Google+按钮,增加分享到新浪微博/腾讯微博按钮(share_sns.png,#share css,share_sns.js,判断is_single,参见这里);增加读者墙页面模板,但未启用,参见这里;安装phurl短网址

  5. 2011/12/19
    合并7张背景图为一张,压缩CSS从15k至11k,启用html优化

  6. 2011/12/13
    升级到Wordpress 3.3版本,好像功能方面没有太大变化
    Jquery升级到1.7.1版本了,仍然手动修改为调用ajax.google.com的
    修改wp-settings里的默认时区:
    date_default_timezone_set( 'UTC' );更改为date_default_timezone_set( 'Asia/Shanghai' ); ☆

  7. 首页排除分类与页面显示分类
    本站的首页排除了2个分类,图表这个栏目则只调用以分类,修改方法参见:这里

  8. 简洁的提速方法:
    1) 首页静态化:可以通过修改cos-html-cache实现,或者直接使用柳城的html_home插件实现,不过小站点,低访问量用不用也无所谓了
    2) 前台去除语言包:非常好的办法,至少提速30%(估的),参见这里

    WordPress的db reload fix、wp super cache、autoptimize等都是非常优秀的Cache插件,可以大幅提高wp的载入速度,不过对于我而言意义不大,所以还是放弃了。

  9. 自定Widget
    本站边栏的生存时间和栏目列表部分都是自定义Widget实现的,栏目列表部分没有使用默认的栏目列表是为了排除一些类别显示,相关方法Google一下可以搜索出很多。

  10. 自定义菜单:
    参见:这里这里这里

    补充:在functions.php里添加add_theme_support( 'nav-menus' );后才会显示

  11. 解决评论回复树状列表,参考ToolBox主题修改实现。

  12. 评论有回复自动邮件通知,非常好使,严重推荐
    参见:http://tugesha.com/archives/66.html

  13. 评论分页:
    参见:http://www.skyff.net/websites/phpwordpress/nonplugin-wordpress-comment-pages.html

  14. 修改默认发件人信箱
    参见:http://www.wordpress.la/emailname.html

  15. 修改登录页面logo和链接地址
    手动修改 /wp-login.php和替换/wp-admin/images/login-logo.png
    没有使用修改functions.php的方法,是因为这个修改很简单,并且不需要程序额外处理。 ☆

  16. 修改META部分的链接
    wp-includes下的default-widgets.php内修改Meta内的各项链接
    wp-includes下的general-template.php内修改wp_register()和wp_loginout()函数的中文提示(因为我在前台禁止加载中文语言包,会导致此处显示英文)。

  17. 修改iimagebrowser插件,实现附件调用指定的二级域名
    本站的图片和其他附件均自动调用使用static.crsay.com这个二级域名

  18. 升级到3.3版本后无法自动生成QuickTags,两个添加的办法:
    1)手动修改/wp-admin/includes/media.php在add_action( 'media_buttons', 'media_buttons' );前面的media_buttons函数尾端添加:

    echo '<input type="button" name="iimage-custom" value="图像" style="padding:0;margin-left:5px;" onclick="iimagebrowser();">';
    

    此时可以删除那个插件,只保留/wp-admin/下的iimage-browser.php文件,这个方法的好处是不需要插件,也不需要Hook函数,在资源占用方面当然很好。只是比较麻烦,一是修改麻烦,二是一旦wp升级又得重新修改。

    2)修改iimage-browser-plugin.php,删除除了插件描述之外的所有内容,用如下代码替换/

    <?php
    /*
    Plugin Name: IImage Browser
    Version: 1.5.2
    Plugin URI: http://
    Description: 图像上传于浏览,基于IImage Browser大量修改
    Author: Martin Chlupáč
    Author URI: http://
    */ 
    
    add_action( 'media_buttons', 'iimage_brower_button' ,11);
    function iimage_brower_button() { ?>
    <!-- iimagebrowser code -->
    <a href="javascript:;" onclick='window.open("../wp-admin/iimage-browser.php?rel_path=/<?php echo date("Y/m/");?>", "IImageBrowser", "width=700,height=600,scrollbars=yes")'>图像</a>
    <!-- iimagebrowser code -->
    <?php  } ?>
    

    也可以删除插件,直接把这段代码放到模板的functions.php里面,当然,在这个文件Hook函数和添加一个插件的消耗是相同的,没有区别。好处就是比较省事、比较方便。

  19. 修改Lightbox for wordpress插件,改为代码形式实现,避免使用插件
    修改过程见与参考资料参见:http://www.crsay.com/network/wordpress-plugin.html

  20. 修改functions.php,实现如本站首页底部的分页效果,避免使用插件

  21. 增加返回顶部按钮,还不错的效果,参见页面右边分割线上的返回顶部图标

  22. 短代码以方便载入mp3/swf和利用Googledoc实现pdf等文件的预览

  23. 整合Zenphoto和Dokuwiki
    其实是个“伪”的整合,参见:http://www.crsay.com/network/wordpress-with-dokuwiki-zenphoto-integrating.html,其中,Zenphoto因为其Cache占用太多空间已经放弃。

其他的修改还有:合并js,合并与简化css,合并多图片为一张图,通过css分别调用,附件启用二级域名,该二级域名设置好Expires与Etag,减少head区不必要的引用,给页面自动生成description以利于SEO,

更多的修改已经记不住了,想起来再补充 🙂

以上种种,在保证功能实现的基础上使用尽量少的插件和诸多优化措施都是为了提升页面打开的速度(美国主机、伤不起啊伤不起),用Pagespeed和Yslow测试了数次,效果非常的不错。