关于nikbobo

Nikbobo,本名刘永强,记忆空间站长,男,1998 年出生于广东茂名,至今(2022 年)23 岁,目前(2022 年)就读于广州大学华软软件学院,常以“nikbobo”这个网名混迹互联网。如无特殊注明,Nikbobo 在本站发表的文章,遵循 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议。详情请参阅关于页面的作者介绍。

又换了个主题,Clean Retina

因为原主题在某些特殊IE内核浏览器的侧边栏会出问题,不用侧边栏又不爽,所以又换了一个主题。加上学习一下 WordPress 子主题的制作,在每天挤出短短时间,使用 WordPress 子主题方式做出了这个主题。

部分修改:

  • 增加版权信息提示
  • 修改底部
  • 完善 Google 结构化数据
  • 添加“无插件”PageNavi
  • 汉化部分
  • 合并 JS、CSS 文件

而且,这个主题支持 Retina 显示屏,不错,但是不好的地方是需要加载的 JS 太多了,我调了半天,勉强不需要那么多了。

Super StartPage v3.0.1.233(首页设置锁定利器)[2013.9.1] – 多种浏览器一键设首!!WinPE下也可设置(锁定)主页!

如何快速有效的设置(锁定)首页,一直电脑技术员头疼的一件事。虽然这算不上一件难事,但每次都要操作固定的步骤,甚至一台电脑有几个浏览器的时候,还要操作多次。而且有时还会忘记设置首页,也无非不是一件麻烦事。特别是如何在 Windows PE 环境下快速设置(锁定)目标系统所有浏览器首页,并不是简单几步操作就可以完成的事情。因此,特开发此软件协助各位快捷、批量的设置浏览器首页。

软件相对于 2 代版本,代码完全重写,提高执行效率,大大降低首页设置失败几率,修复 2 代严重 BUG,增加了“安全锁定”、“加入收藏”等功能,乃首页设置(锁定)之利器也!

 

SuperStartPage

 

软件信息

程序名称:Super StartPage 3 (SP3)

程序版本:3.0.1.233

支持系统:适用于 x86 / x64 的 Windows XP / Windows Vista / Windows 7 / Windows 8 操作系统以及同期Windows PE系统

支持语言:简体中文 (Simplified Chinese)

软件下载

下载地址:百度网盘

文件效验:

压缩包:

文件: SuperStartPage3_3.0.1.233.zip
大小: 1638583 字节
修改时间: 2013年9月1日, 19:41:48
MD5: 5658D101F0DEC353CA232B2204B55BA8
SHA1: 54742E850D3039B4AC3CD4BCAF379EB4BF46E49F
CRC32: 0872075C

主程序:

文件: SuperStartPage3.exe
大小: 2512862 字节
文件版本: 3.0.1.233
修改时间: 2013年9月1日, 19:41:10
MD5: 64B4152AA9FED62941A8F9E3F1559D2E
SHA1: 45BD42220C2A991619AC12C554F023C7C08C7CE5
CRC32: 656B96D6

(任何未经作者同意对程序进行的修改操作,包含但不限于破解、反编、二次开发等,需承担法律责任)

 

特别提醒

  1. 请下载后务必核实文件效验信息,如不正确,请勿使用;
  2. 本程序属于系统首页设置管理程序,必然涉及对注册表的直接修改,易被各类安全软件误报,非信勿用;
  3. 强烈建议在阅读说明后,再行使用本程序;
  4. 在 Windows PE 下使用本程序时,推荐使用与本程序具有最佳兼容性的 U 盘装机助理

重要说明

  1. 本软件支持在 Windows 系统桌面环境Windows PE 环境使用;
  2. Windows 系统桌面环境下,可直接修改首页,但此环境下易被杀软阻拦
  3. Windows PE 环境下,将自动搜索硬盘中所有系统,并修改其首页,推荐 Windows PE 环境下使用;
  4. 所设置首页需通过配置文件进行更改,配置文件于软件同目录下UrlGenius.ini,配置方法见配置文件内说明;
  5. 本程序可静默运行,静默参数“/S”(不包括两侧引号)。

多图杀猫

SuperStartPage

SuperStartPage 主程序 UI 预览

主页锁定效果

主页锁定效果

 

更新日志

 [2013.9.1] v3.0.1.233

  1. 〔修正〕配置文件部分设置不生效
  2. 〔更新〕配置文件格式

[2013.8.5] v3.0.0.229

  1. 〔新增〕第一个对外公开版本发布
  2. 〔修正〕某些特殊浏览器设置的陷阱导致主页设置失败以及快捷方式失效
  3. 〔新增〕“加入收藏”功能,此功能目前暂时仅支持 IE 浏览器,不过 Windows 系统桌面环境和 Windows PE 环境都可用哦
  4. 〔新增〕“安全锁定”功能,此功能目前暂时仅支持 IE 浏览器,不过 Windows 系统桌面环境和 Windows PE 环境都可用哦

换了个主题——ProwerV6

思量再三,换成了 ProwerV6 这个主题,把用了许多年的 iGoogler 主题换掉了。为什么要换呢?因为——响应式设计。这可以省掉插件。但是,问题就来了——不支持IE6,这个真的没办法,算了吧。

旧主题的各种优化教程,我还是会发,算是为 iGoogler 主题做的最后一点贡献。

找不到“友情链接”的博主,请留意底部。

WordPress 缓存插件 WP File Cache 安装与使用

上篇文章《我是怎么对我的网站进行优化的(四):Speed》提到要写这么一个教程,那我就写一写吧!其实 WP File Cache 并“人如其名”,而是对 WordPress Object Cache 的优化。

介绍

The plugin implements object level persistent caching and can be used instead of the built in WordPress WP_Object_Cache. Unlike WP Super Cache, Hyper Cache and other plugins, WP File Cache does not cache the entire page; instead, it caches the data WordPress explicitly asks it to cache (using wp_cache_xxx() API functions). Although this means that the performance will be less than with, say, WP Super Cache, all your pages remain dynamic. WP File Cache won’t help you much if the plugins or theme you are using do not use WordPress Cache API. This is by design, since the plugin tries to play nice. However, for most WordPress installations this will not be critical.

简单来说,这个插件就是将 WordPress Object Cache 保存到文件(所以需要配合 WordPress Object Cache 使用,要不没那么明显的效果),这可是我们这些无法上内存缓存的小家伙的福音。明显的,这个插件要主机的硬盘 I/O 比较好才行。

不过,那些财大气粗,可以上内存缓存的家伙,就不要去使用了,用好你的内存缓存吧!无论怎么样,内存缓存总比文件缓存的效率高。

而且,这个插件不同于 WP Super Cache、Hyper Cache 等插件,所以,你安装完这个后,如果没有我那种特殊需求,你还可以在安装其它的缓存插件,会达到更明显的加速效果。

安装使用

怎么安装就不用我教了吧?后台搜索“WP File Cache”,安装即可。借用“大猫”的一句话:神马FTP时代,全部都过去了。

然后,勾上“Enable WP File Cache”和“Save cached data across sessions”,轻点下“Save Changes“,不必退出登录,如果你的主题优化的足够好的话,立刻就可以体验到飞一般的效果了。

安装后出现了一些莫名其妙的问题,怎么办?

So Easy!勾上“Do not use cache in the Admin Panel”,问题应该自解了。如果还不能解决,只能卸载插件了,说明你不适合用这个插件。

我是怎么对我的网站进行优化的(四):Speed

很多同学都说 WordPress 很慢,但是作为全世界最常用的建站和博客系统 WordPress 来说,我相信在性能设计上肯定不会有太大的问题,WordPress 开发团队也肯定也考虑到这个问题。其实我觉得,WordPress 并不慢,只是看你会不会用,就像 Windows、Android,有些人觉得不错,有些人觉得慢、差劲,其实也许是你会不会使用的问题。

主机自身的速度的确是影响网站速度最重要的一点,但除此之外,还受到其他很多方面的影响,比如安装太多效率低下的插件,使用代码质量低下的主题,没有正确使用 WordPress 的缓存等。

今天我就结合实例(本博客)来和大家分析一下这个问题。

首先说下,本博客托管在一般的虚拟主机上,并没有托管在 VPS、有 Memcached 等各种各样内存缓存的虚拟主机上,而且,本博客也没有用任何静态化缓存插件,因为我给博客配置了“手机版”,用这些插件特别容易出问题。

那么怎么去优化自身呢?

尽量减少使用插件

这是首要的一点。有句流行的话说过“能用代码解决的决不用插件”,但实际情况是大部分的人往往都没足够的代码知识,更不可能做到每个插件的代码化。所以,更好的选择是能不用的插件就不用。因为大部分的插件都会进行数据查询与生成,这在页面生成过程中将耗费时间。需要注意的是,尽量不要使用效率极低的插件,比如某些 SEO 插件,这完全是可以用代码实现的,对于某些插件仅有一个文件的,完全可以尝试自己简单修改、阅读,加入主题的 Functions.php 中,我相信对大部分喜欢折腾 WordPress 的人来说,没什么难度。

并且,插件大多都会在页面中载入各种各样的 CSS 和 JS,而网站优化中有2条内容是:

  • 减少HTTP请求,每一次对于JS,CSS等文件的访问都是一次HTTP请求。插件用得少,HTTP 请求数自然就变少了。
  • 合并 CSS 和 JS 文件,减少HTTP请求的首要办法是合并 CSS 和 JS。因为浏览器没有你们想象中的那么聪明,告诉一个令你们感到不可思议的事实——1个 10KB 的 JS 和2个 5KB 的  JS 载入所耗费的时间是不一样的,而且后者载入时间会明显增多。特别是文件都在同一域名下这样的情况更为明显。而插件的 JS 和 CSS 都是独立的,如果10个插件每个都生成1个 JS + 1个CSS,再加上主题的话,CSS 和 JS 的数量的数量可能会令你无法想象。当然,我也用了好多插件(20来个~),你要是有点水平的话,可以尝试自己合并,但是,我想说的是,个人建议不要使用自动合并插件,很多时候,出了问题,你也不知道该怎么办,甚至出了问题你还没有知道。

而且,对于不用插件的处理,我建议“删除”而不是简简单单的“禁用”。因为 WordPress 在每一次的页面访问时,都会判断插件的使用情况。让 WordPress 做更少的判断就等于做更少的数据查询。

使用经过优化的主题

如今 WordPress 主题是越来越绚丽,但请你们在使用这些主题时,考虑下主机能否带得动。而且,明显那些国外的主题(默认主题除外)不太适合我们,因为一些国外的主题往往使用了过多的 JS 和 CSS,人家带宽好,不怕这些,但我们 4M、6M 甚至有些地方还在用着 1M、2M 的宽带的人使用起来可就受苦了。当然,如果你会手动修改主题,使其能适应我们这种带宽的话,我没意见。

使用的主题尽量满足以下要求:

  • 合并 CSS 和 JS——尽量仅仅使用一个 JS 和一个 CSS
  • 正确放置 CSS 和 JS 的位置——尽量将 JS 放置到页面底部、CSS 放置到页面顶部(最好放在</head>之前)
  • 合并图片——尽量少使用图片,能的话,将主题图片使用 CSS Sprites 控制在1~2个
  • 减少数据查询——尽量少使用数据查询,能直接输出的就不要用数据查询

对页面进行 GZip 压缩

使用 GZip 压缩至少可以减少网页体积20%(静态资源除外)。通常大部分的优秀主机都能够支持服务端的 GZip 并且可以自动压缩。如果服务器没有自动进行页面压缩,就需要自行开启。如何开启,我就不多说了,这个请自己百度,寻找适合的方法。

使用 CDN 加速静态资源

网站的静态文件一般有两种:第一种是网站的 CSS,JS 和一些主题的常用背景图片和按钮文件,这些图片如果网站不进行改版或者其他改动,基本上是不会修改的,第二种是每天更新的网站内容中上传的图片或者附件,这些图片文件也是基本不会改动的。

解决好静态文件存储和加速,网站性能就首先能得到基本的保证了,WordPress 构建的网站和博客也是一样的。对于这些静态文件来说,最好的解决方案永远是使用 CDN 网络进行加速,这样服务器的压力将大大降低,因为访问页面只有当前页面是在自己服务器上,其他所有图片 JS CSS 都是从 CDN 获取的。

从使用便捷性和性价比角度来说,个人推荐七牛云存储。

正确使用缓存插件

这个要跟据你的实际情况使用,比如本博客使用的是 WP File Cache + DB Cache Reloaded Fix,考虑到 WP File Cache,网上还没有教程,有时间我再写一个吧!

有效利用 WordPress 自身缓存机制——对象缓存

要彻底明白和搞懂 WordPress 性能优化,首先要理解 WordPress 缓存机制,WordPress 默认是一种叫做 WordPress Object Cache 的对象缓存机制,它把需要缓存的内容按照 Key-Value 这样的模式进行缓存(和 No-SQL 的 key-value 的有点类似),当然它还支持按照 Group 来划分和避免缓存的内容冲突。

所以最基础的 WordPress 缓存就是,把 WordPress 产生的 Key-Value 缓存起来。比如存到文件(文件缓存),或者存到内存(内存缓存)。

由此得知,WordPress 主题和插件尽量使用模板函数,因为 WordPress 模板函数如果部分已经做好了 WordPress Object Cache。
比如 get_the_terms 和 wp_get_object_terms 这两个函数,功能基本一样,但是 get_the_terms 直接从对象缓存中取数据,无查询,而 wp_get_object_terms 每次都从数据库中取数据。

WordPress 插件和主题如果一定要直接查询数据库,请做好 WordPress Object Cache,将查询的结果使用 wp_cahce_set 存到 Object Cache 中,下次直接使用 wp_cache_get 获取。

不过,需要注意的是,别过度,比如某些已经使用过 WordPress Object Cache 的模版函数,就不要自作多情再增加一个了,那样会更慢。

用好 WordPress Transients API

Transients 是瞬时的意思,WordPress 的 Transients API 就是 WordPress 用来存储一些缓存的数据到数据库中最简单也是最标准的方法,Transients API 给这些缓存的数据一个过期时间,并且时间已到就会自动删除,所以如果你需要存储一些有生命周期的选项的时候,Transients API 就是最好的选择。

这难道同样不是我们做缓存的最佳选择么?

尽量不使用 WordPress 小工具

WordPress 小工具其实是速度变慢的根源之一,因为这会引发许许多多的数据查询。所以,尝试自己手写 SideBar 吧,这并不难。而且,这样也有利于我们使用 WordPress Transients API 和 WordPress Object Cache。

Super StartPage v3.0.0.229(首页设置锁定利器)[2013.8.5] – 多种浏览器一键设首!!WinPE下也可设置(锁定)主页!

如何快速有效的设置(锁定)首页,一直电脑技术员头疼的一件事。虽然这算不上一件难事,但每次都要操作固定的步骤,甚至一台电脑有几个浏览器的时候,还要操作多次。而且有时还会忘记设置首页,也无非不是一件麻烦事。特别是如何在 Windows PE 环境下快速设置(锁定)目标系统所有浏览器首页,并不是简单几步操作就可以完成的事情。因此,特开发此软件协助各位快捷、批量的设置浏览器首页。

软件相对于 2 代版本,代码完全重写,提高执行效率,大大降低首页设置失败几率,修复 2 代严重 BUG,增加了“安全锁定”、“加入收藏”等功能,乃首页设置(锁定)之利器也!

SuperStartPage

软件信息

程序名称:Super StartPage 3 (SP3)

程序版本:3.0.0.229

支持系统:适用于 x86 / x64 的 Windows XP / Windows Vista / Windows 7 / Windows 8 操作系统以及同期Windows PE系统

支持语言:简体中文 (Simplified Chinese)

软件下载

下载地址:百度网盘

文件效验:

压缩包:

文件:SuperStartPage3_3.0.0.229.zip
大小:1638579 字节
修改时间:2013年8月25日, 19:47:08
MD5:05A6CBC1DC6DB379A436B9EC3C0BA7D5
SHA1:693EEF8DBE5D1341D96DE52B15FCB1946F7662FB
CRC32:87ECD4FB

主程序:

文件:SuperStartPage3.exe
大小:2512844 字节
文件版本:3.0.0.229
修改时间:2013年8月25日, 18:21:58
MD5:388840AA3635D09FC05B6C94128C7763
SHA1:FC9226DD0E4AB9DE8A7E47CEAE86145A840FD2FD
CRC32:F59D1600

(任何未经作者同意对程序进行的修改操作,包含但不限于破解、反编、二次开发等,需承担法律责任)

 

特别提醒

  1. 请下载后务必核实文件效验信息,如不正确,请勿使用;
  2. 本程序属于系统首页设置管理程序,必然涉及对注册表的直接修改,易被各类安全软件误报,非信勿用;
  3. 强烈建议在阅读说明后,再行使用本程序;
  4. 在 Windows PE 下使用本程序时,推荐使用与本程序具有最佳兼容性的 U 盘装机助理

重要说明

  1. 本软件支持在 Windows 系统桌面环境Windows PE 环境使用;
  2. Windows 系统桌面环境下,可直接修改首页,但此环境下易被杀软阻拦
  3. Windows PE 环境下,将自动搜索硬盘中所有系统,并修改其首页,推荐 Windows PE 环境下使用;
  4. 所设置首页需通过配置文件进行更改,配置文件于软件同目录下UrlGenius.ini,配置方法见配置文件内说明;
  5. 本程序可静默运行,静默参数“/S”(不包括两侧引号)。

多图杀猫

SuperStartPage

SuperStartPage 主程序 UI 预览

主页锁定效果

主页锁定效果

更新日志

[2013.8.5] v3.0.0.229

  1. 〔新增〕第一个对外公开版本发布
  2. 〔修正〕某些特殊浏览器设置的陷阱导致主页设置失败以及快捷方式失效
  3. 〔新增〕“加入收藏”功能,此功能目前暂时仅支持 IE 浏览器,不过 Windows 系统桌面环境和 Windows PE 环境都可用哦
  4. 〔新增〕“安全锁定”功能,此功能目前暂时仅支持 IE 浏览器,不过 Windows 系统桌面环境和 Windows PE 环境都可用哦

iGoogler 主题使用七牛镜像存储 WordPress 插件导致 JS 加载失败的修正后续:手动合并 JS 文件

之前的文章:iGoogler 主题使用七牛镜像存储 WordPress 插件导致 JS 加载失败的修正,提到过一个问题:这样操作以后,该主题 JS 合并的效果消失,那么,我们何不手动合并 JS 文件呢?下面就和我一起来动手吧!最终效果是合并为两个文件:all-in-one.js 和 google-plusone.js。当然,你如果确定一定会开启 Google Plus 的话,你完全可以全部合并为 all-in-one.js。

操作步骤

1)在 wp-content/themes/iGoogler/js 目录以 UTF-8 无 BOM 模式创建 all-in-one.js,不懂如何创建的,就直接把 comments-ajax.js(comment-ajax.js)复制一份,重命名为 all-in-one.js,然后清空里面的内容即可;

2)在 wp-content/themes/iGoogler/js/all-in-one.js 中写入以下代码;

// JavaScript Document
$(document).ready(function(e) {
	
	// Fix some bugs for ie6
	if ('undefined' == typeof(document.body.style.maxHeight)) {
		if($(".wrap").width() > 1219)
			$(".wrap").width(1219);
		else if($(".wrap").width() < 1001)
			$(".wrap").width(1001);
	}
	
	// Reisize Main Content to fit height
	var minheight = Math.max( $("#lbar").height(), $("#rbar").height() );
	if( $("#main").height() < minheight) {
		$("#main").height(minheight);
	}
	
	// Navigation
	$("#nav .menu li").has(".sub-menu").mouseover(function(e) {
		$("#nav .sub-menu:visible").css("z-index",99);
		$(this).children(".sub-menu").css("z-index",999);
        $(this).children(".sub-menu").stop().slideDown("fast");
    });
	$("#nav .menu li").has(".sub-menu").mouseleave(function(e) {
        $(this).children(".sub-menu").removeAttr('style').stop().slideUp("fast");    
    });
	
	// left sidebar animation
	var position = $("#lbar .line").position().top + 20;
	$("#lbar .lbar_content").css("top", position);
    $("#lbar .lbar_title").click(function(e) {
		$(".lbar_title a").removeClass("current");
		$(e.target).addClass("current");
		$(".lbar_content").css("display","none");
		$(this).next(".lbar_content").slideDown(500);
    });
	
});

// JavaScript Document
$(document).ready(function(e) {
    	// Fix Position problems of #respond_ad
	if($("#respond_ad").length > 0) {
		if ($("#respond_ad").offset().left < 455 ) {
			$("#respond_ad").offset({left:455});
		}
		if ($("#respond").height() < $("#respond_ad").height() ) {
			$("#respond").height($("#respond_ad").height());
		}
	}
	
	if($("#single_bottom_ad").length > 0) {
		if($("#sidebar_bottom").offset().top + $("#single_bottom_ad").height() > $(".post-nav").offset().top) {
			$("#sidebar_bottom").css("margin-bottom",$("#single_bottom_ad").height() - $("#sidebar_bottom").height());
		}
	}
	
	// Single Post footer turn
	$("#sidebar_bottom span:first").addClass("active");
	$("#sidebar_bottom ul:first").fadeIn();
	$(".post-nav").css("margin-top",$("#sidebar_bottom ul:first").css("height"));
	$("#sidebar_bottom span").mouseover(function (){
		$("#sidebar_bottom span").removeClass("active");$(this).addClass("active");
		if($(this).next("ul").css("display")!="block")
		{
			$("#sidebar_bottom ul").hide();
			$(this).next("ul").fadeIn();
		}
		$("#main .post-nav").css("margin-top",$(this).next().css("height"));
	});	
});

/**
 * WordPress jQuery-Ajax-Comments v1.3 by Willin Kan.
 * URI: http://kan.willin.org/?p=1271
 */
var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
	if("undefined" != typeof(document.getElementsByTagName('script')[i].src) ) {
		var js_url = document.getElementsByTagName('script')[i].src;
		got = js_url.indexOf('all-in-one.js'); i++ ; //Modified by me
	}
}
js_url = js_url.replace('nikbobo.qiniudn.com','www.nikbobo.net');

		var edit_mode = '1', // 再編輯模式 ( '1'=開; '0'=不開 )
		
		ajax_php_url = js_url.replace("js/all-in-one.js","comments-ajax.php"),
		wp_url = js_url.substr(0, js_url.indexOf('wp-content')),
		pic_sb = wp_url + 'wp-admin/images/wpspin_light.gif', // 提交 icon
		pic_no = wp_url + 'wp-admin/images/no.png',      // 錯誤 icon
		pic_ys = wp_url + 'wp-admin/images/yes.png',     // 成功 icon
		txt1 = '<div id="loading"><img src="' + pic_sb + '" style="vertical-align:middle;" alt=""/> 正在提交, 请稍候...</div>',
		txt2 = '<div id="error">#</div>',
		txt3 = '"><img src="' + pic_ys + '" style="vertical-align:middle;" alt=""/> 提交成功',
		edt1 = ', 刷新页面之前可以<a rel="nofollow" class="comment-reply-link" href="#edit" onclick=\'return addComment.moveForm("',
		edt2 = ')\'>再编辑</a>',
		cancel_edit = '取消编辑',
		edit, num = 1, comm_array=[]; comm_array.push('');

$(document).ready(function($) {
		$comments = $('#comments-title'); // 評論數的 ID
		$cancel = $('#cancel-comment-reply-link'); cancel_text = $cancel.text();
		$submit = $('#commentform #submit'); $submit.attr('disabled', false);
		$('#comment').after( txt1 + txt2 ); $('#loading').hide(); $('#error').hide();
		$body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');

/** submit */
$('#commentform').submit(function() {
		$('#loading').slideDown();
		$submit.attr('disabled', true).fadeTo('slow', 0.5);
		if ( edit ) $('#comment').after('<input type="text" name="edit_id" id="edit_id" value="' + edit + '" style="display:none;" />');

/** Ajax */
	$.ajax( {
		url: ajax_php_url,
		data: $(this).serialize(),
		type: $(this).attr('method'),

		error: function(request) {
			$('#loading').slideUp();
			$('#error').slideDown().html('<img src="' + pic_no + '" style="vertical-align:middle;" alt=""/> ' + request.responseText);
			setTimeout(function() {$submit.attr('disabled', false).fadeTo('slow', 1); $('#error').slideUp();}, 3000);
			},

		success: function(data) {
			$('#loading').hide();
			comm_array.push($('#comment').val());
			$('textarea').each(function() {this.value = ''});
			var t = addComment, cancel = t.I('cancel-comment-reply-link'), temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId), post = t.I('comment_post_ID').value, parent = t.I('comment_parent').value;

// comments
		if ( ! edit && $comments.length ) {
			n = parseInt($comments.text().match(/\d+/));
			$comments.text($comments.text().replace( n, n + 1 ));
		}

// show comment
		new_htm = '" id="new_comm_' + num + '"></';
		new_htm = ( parent == '0' ) ? ('\n<ol style="clear:both;" class="commentlist' + new_htm + 'ol>') : ('\n<ul class="children' + new_htm + 'ul>');

		ok_htm = '\n<span id="success_' + num + txt3;
		if ( edit_mode == '1' ) {
			div_ = (document.body.innerHTML.indexOf('div-comment-') == -1) ? '' : ((document.body.innerHTML.indexOf('li-comment-') == -1) ? 'div-' : '');
			ok_htm = ok_htm.concat(edt1, div_, 'comment-', parent, '", "', parent, '", "respond", "', post, '", ', num, edt2);
		}
		ok_htm += '</span><span></span>\n';

		$('#respond').before(new_htm);
		$('#new_comm_' + num).hide().append(data);
		$('#new_comm_' + num + ' li').append(ok_htm);
		$('#new_comm_' + num).fadeIn(4000);

		$body.animate( { scrollTop: $('#new_comm_' + num).offset().top - 200}, 900);
		countdown(); num++ ; edit = ''; $('*').remove('#edit_id');
		cancel.style.display = 'none';
		cancel.onclick = null;
		t.I('comment_parent').value = '0';
		if ( temp && respond ) {
			temp.parentNode.insertBefore(respond, temp);
			temp.parentNode.removeChild(temp)
		}
		}
	}); // end Ajax
  return false;
}); // end submit

/** comment-reply.dev.js */
addComment = {
	moveForm : function(commId, parentId, respondId, postId, num) {

		var t = this, div, comm = t.I(commId), respond = t.I(respondId), cancel = t.I('cancel-comment-reply-link'), parent = t.I('comment_parent'), post = t.I('comment_post_ID');
		if ( edit ) exit_prev_edit();
		num ? (
			t.I('comment').value = comm_array[num],
			edit = t.I('new_comm_' + num).innerHTML.match(/(comment-)(\d+)/)[2],
			$new_sucs = $('#success_' + num ), $new_sucs.hide(),
			$new_comm = $('#new_comm_' + num ), $new_comm.hide(),
			$cancel.text(cancel_edit)
		) : $cancel.text(cancel_text);

		t.respondId = respondId;
		postId = postId || false;

		if ( !t.I('wp-temp-form-div') ) {
			div = document.createElement('div');
			div.id = 'wp-temp-form-div';
			div.style.display = 'none';
			respond.parentNode.insertBefore(div, respond)
		}

		!comm ? ( 
			temp = t.I('wp-temp-form-div'),
			t.I('comment_parent').value = '0',
			temp.parentNode.insertBefore(respond, temp),
			temp.parentNode.removeChild(temp)
		) : comm.parentNode.insertBefore(respond, comm.nextSibling);

		$body.animate( { scrollTop: $('#respond').offset().top - 180 }, 400);

		if ( post && postId ) post.value = postId;
		parent.value = parentId;
		cancel.style.display = '';

		cancel.onclick = function() {
			if ( edit ) exit_prev_edit();
			var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId);

			t.I('comment_parent').value = '0';
			if ( temp && respond ) {
				temp.parentNode.insertBefore(respond, temp);
				temp.parentNode.removeChild(temp);
			}
			this.style.display = 'none';
			this.onclick = null;
			return false;
		};

		try { t.I('comment').focus(); }
		catch(e) {}

		return false;
	},

	I : function(e) {
		return document.getElementById(e);
	}
}; // end addComment

function exit_prev_edit() {
		$new_comm.show(); $new_sucs.show();
		$('textarea').each(function() {this.value = ''});
		edit = '';
}

var wait = 15, submit_val = $submit.val();
function countdown() {
	if ( wait > 0 ) {
		$submit.val(wait); wait--; setTimeout(countdown, 1000);
	} else {
		$submit.val(submit_val).attr('disabled', false).fadeTo('slow', 1);
		wait = 15;
  }
}

});// end jQ

addComment={moveForm:function(d,f,i,c){var m=this,a,h=m.I(d),b=m.I(i),l=m.I("cancel-comment-reply-link"),j=m.I("comment_parent"),k=m.I("comment_post_ID");if(!h||!b||!l||!j){return}m.respondId=i;c=c||false;if(!m.I("wp-temp-form-div")){a=document.createElement("div");a.id="wp-temp-form-div";a.style.display="none";b.parentNode.insertBefore(a,b)}h.parentNode.insertBefore(b,h.nextSibling);if(k&&c){k.value=c}j.value=f;l.style.display="";l.onclick=function(){var n=addComment,e=n.I("wp-temp-form-div"),o=n.I(n.respondId);if(!e||!o){return}n.I("comment_parent").value="0";e.parentNode.insertBefore(o,e);e.parentNode.removeChild(e);this.style.display="none";this.onclick=null;return false};try{m.I("comment").focus()}catch(g){}return false},I:function(a){return document.getElementById(a)}};

/*

highlight v3

Highlights arbitrary terms.

<http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html>

MIT license.

Johann Burkard
<http://johannburkard.de>
<mailto:jb@eaio.com>

 */

jQuery.fn.highlight = function(pat) {
	function innerHighlight(node, pat) {
		var skip = 0;
		if (node.nodeType == 3) {
			var pos = node.data.toUpperCase().indexOf(pat);
			if (pos >= 0) {
				var spannode = document.createElement('span');
				spannode.className = 'highlight';
				var middlebit = node.splitText(pos);
				var endbit = middlebit.splitText(pat.length);
				var middleclone = middlebit.cloneNode(true);
				spannode.appendChild(middleclone);
				middlebit.parentNode.replaceChild(spannode, middlebit);
				skip = 1;
			}
		} else if (node.nodeType == 1 && node.childNodes
				&& !/(script|style)/i.test(node.tagName)) {
			for ( var i = 0; i < node.childNodes.length; ++i) {
				i += innerHighlight(node.childNodes[i], pat);
			}
		}
		return skip;
	}
	return this.each(function() {
		innerHighlight(this, pat.toUpperCase());
	});
};

jQuery.fn.removeHighlight = function() {
	return this.find("span.highlight").each(function() {
		this.parentNode.firstChild.nodeName;
		with (this.parentNode) {
			replaceChild(this.firstChild, this);
			normalize();
		}
	}).end();
};

3)将 wp-content/themes/iGoogler/js/all-in-one.js 中的域名改成你的;

查找

js_url = js_url.replace('nikbobo.qiniudn.com','www.nikbobo.net');

 

其中,nikbobo.qiniudn.com 更改为你的七牛提供的二级域名,www.nikbobo.net 改成你的 WordPress 站点域名。

4)将 wp-content/themes/iGoogler 目录的 all-in-one-js.php 整个替换为以下代码;

<script type="text/javascript" src="<?php echo get_template_directory_uri();?>/js/all-in-one.js"></script>
<?php
if(igoogler_option('google-plus-one')) {
	echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/google-plusone.js"></script>' . "\n";
}
?>

<?php if(search_words()): $arr = preg_split('/[\s,]+/', search_words()); ?>
<script type="text/javascript"><!--//--><![CDATA[//><!--
$(document).ready(function(e) {
	<?php foreach($arr as $words):?>
	    $(".post").highlight("<?php echo $words;?>");
	<?php endforeach; ?>
});
//--><!]]></script>
<?php endif;?>

大功告成!

开启 Google Plus 后全合并方法

1)将以下代码添加到 wp-content/themes/iGoogler/js/all-in-one.js 末尾;

(function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();

2)将 wp-content/themes/iGoogler 目录的 all-in-one-js.php 整个替换为以下代码;

<script type="text/javascript" src="<?php echo get_template_directory_uri();?>/js/all-in-one.js"></script>

<?php if(search_words()): $arr = preg_split('/[\s,]+/', search_words()); ?>
<script type="text/javascript"><!--//--><![CDATA[//><!--
$(document).ready(function(e) {
	<?php foreach($arr as $words):?>
	    $(".post").highlight("<?php echo $words;?>");
	<?php endforeach; ?>
});
//--><!]]></script>
<?php endif;?>

大功告成!

更换代码高亮插件:WP-Syntax

因为某些原因,更换代码插件到 WP-Syntax。据说这也是 WordPress 官方推荐的插件。特此记录一下折腾过程。

如何添加代码高亮

切换你的 WordPress 编辑器到 HTML 模式,使用以下格式添加代码:

<pre lang="Language" line="1" escaped="true" >

</pre>

更换 WP-Syntax 代码样式

说真的,WP-Syntax 的 CSS 样式看起来比较难看,所以修改了一下,参考倡萌的修改方法,在你的主题的 style.css 文件中,添加以下代码:

.wp_syntax {
	color:#100;
	background-color:#f9f9f9;
	border:1px solid #EBEBEB;
	margin:0 0 1.5em 0;
	overflow:auto;
}
.wp_syntax {
	overflow-x:auto;
	overflow-y:hidden;
	padding-bottom:expression(this.scrollWidth > this.offsetWidth ? 15:0);
	width:99%;
}
.wp_syntax table {
	border:none;
	border-collapse:collapse;
	margin:0;
	padding:0;
	width:100% !important
}
.wp_syntax caption {
	padding:2px;
	width:100%;
	background-color:#def;
	text-align:left;
	font-family:Monaco;
	font-size:13px;
	line-height:20px;
}
.wp_syntax caption a {
	color:#1982d1;
	text-align:left;
	font-family:Monaco;
	font-size:13px;
	line-height:20px;
	text-decoration:none;
}
.wp_syntax caption a:hover {
	color:#1982d1;
	text-decoration:underline;
}
.wp_syntax div,.wp_syntax td {
	border:none;
	text-align:left;
	padding:0;
	vertical-align:top;
}
.wp_syntax td.code {
	background:none;
	line-height:normal;
	white-space:normal;
	padding-left:10px;
}
.wp_syntax pre {
	background:transparent;
	margin:0;
	padding:0;
	width:auto;
	float:none;
	clear:none;
	overflow:visible;
	font-family:Monaco;
	font-size:13px;
	line-height:20px;
	white-space:pre;
}
.wp_syntax td.line_numbers pre {
	border-right:3px solid #6CE26C;
	background-color:#E7E5DC;
	color:gray;
	width:20px;
	padding:0 5px;
	text-align:right;
}

然后,在你主题的 Functions.php 中添加以下代码来禁用 WP-Symtax 插件的 CSS 样式代码。

<?php
if ( has_action( 'wp_print_styles', 'wp_syntax_style' ) ) {
remove_action( 'wp_print_styles', 'wp_syntax_style' );
};
?>

WordPress 让代码不再误人子弟

不知道大家有没有过这样的经历?辛辛苦苦从大神的网站上复制的代码,粘贴到自己的博客上后,刷新——哦,My God!没效果!,这还不算糟糕,最糟糕的是——出错了!站点挂掉了!这是怎么回事呢?今天就让我来带你们一探究竟。

原因

问题出自万恶 WordPress,它会自动将函数代码中半角的单引号、双引号转换为全角标点,虽然在页面上显示的还是半角标点,但复制后却是全角的标点,造成函数代码无法运行(真不知道WordPress 的开发者为什么要进行这些转换)。所以这里建议喜欢在自己博客上记录折腾 WordPress 心得体会或转载代码的童鞋,请按下面的方法,改造一下自己的WordPress程序,不要弄一堆不能用的代码放在那,误人子弟。

方法一:修改 WordPress 核心文件去除此功能

很简单,修改 wp-includes/formatting.php ,把相关语句注释掉即可。

查找

// static strings  
$curl = str_replace($static_characters, $static_replacements, $curl); 
// regular expressions  
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); 

替换为

// static strings  
//$curl = str_replace($static_characters, $static_replacements, $curl); 
// regular expressions  
//$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); 

大功告成!

方法二:安装 WordPress 插件

方法一固然好,但是每次 WordPress 更新就失效了,又要重新更改一次,怎么办?

很简单,在控制面板搜索“Quotmarks Replacer”插件安装即可,这个插件就是专门为了解决这个问题而生的。