WordPress 子主题功能 + 为 WordPress 增加分类搜索功能并美化

近期关于 WordPress 方面主要写了两篇文章,分别是 使用 WordPress 的子主题(Child Themes)功能快速制作自己的主题为 WordPress 增加按分类搜索功能并自定义外观

之后,关于 WordPress 的文章,我直接首发在 我爱水煮鱼 上面,在 潜行者m 博客就不转发了,只对一些比较好点的文章做一个链接。欢迎大家关注 我爱水煮鱼,国内最专业的 WordPress 技术平台。

子主题功能

如果你想修改一个 WordPress 最好的方法并不是直接上去修改,而是通过 WordPress 的子主题功能进行修改。这样修改之后,不会影响到原来主题文件,原来主题升级覆盖之后,也不会影响你修改的内容。

结合着官方文档,并且动手实践了一下,写出了这篇文章:使用 WordPress 的子主题(Child Themes)功能快速制作自己的主题

增加分类搜索功能并定义外观

对于一个比较大型类门户的博客来说,按照分类搜索功能是必不可少的,这篇文章就介绍了如何增加这个功能。同时对输出的 select 分类选择下拉列表进行了美化。
这篇文章中,提供并用 jQuery 实现了模拟下拉列表的功能,想要围观请看这里:为 WordPress 增加按分类搜索功能并自定义外观

WordPress 迁移 SAE 完全操作攻略

最近终于算是忙完了大部分工作了,同时也有更多的时间来写写文章,或者做点其他的事情了。现在吃喝不愁,没有多少繁忙的事情,可以学学东西,做点东西,写点文章等等。同时,博客要提高文章质量,更新速度大约在两到三天左右。

SAE 是什么

在迁移 SAE 之前,有必要先简单的了解一下 SAE 是什么。SAE 的全称是 Sina App Engine,翻译过来就是 新浪应用平台。这个平台提供了一些方便开发的组件、优质高速的硬件等,方便开发者进行应用的开发。狭义的讲,就是一个网站空间,可以把网站放上去,但是和普通的虚拟主机、VPS 等又有很多不同的地方。在后面你会了解到。它的地址:http://sae.sina.com.cn

为什么要迁移 SAE

之所以迁移到 SAE 上,是因为 SAE 有以下几个优点。

  1. 硬件质量高,网站访问速度快。
  2. 专业,不用怕数据丢失或者服务商跑路。
  3. 按照你使用的资源进行收费,收费合理,性价比高。
    最看重的是 SAE 平台的稳定、高速和性价比,与原来的美国空间、香港空间相比,低价高质量。

开通 SAE

开通 SAE 只需要打开 SAE ,然后点击右上方的注册即可,它使用新浪微博作为账号。其中还要区分几个概念,包括安全邮箱、安全密码等等。此外,SAE 平台使用 SVN 的方式上传文件,它的使用要比传统的 FTP 上传方便简单,但是需要学习和适应,这点官方文档写的非常详细。你需要花费一点时间,查看一下他们的帮助文档,这些很简单,也不是本文要说的重点。帮助文档:http://sae.sina.com.cn/?m=devcenter

迁移 WordPress

本文的重点不是 SAE 的注册和开通,而是在于如何合理正确高效的把 WordPress 博客,从之前的主机中迁移到 SAE 中。

安装 WordPress 应用

SAE 之所以高速、稳定,是因为它限制了部分功能。例如:出于完全考虑,SAE 禁止了 I/O 读写操作,这样,就无法使用传统的函数,进行生成或者读取操作等。

所以,官方原版的 WordPress 是不能直接安装上去的,因为里面的一些功能(例如:在线安装主题)是 SAE 平台所不支持的。但是 WordPress 这么流行的系统,当然有团队修改里面的代码,把不支持的功能,进行改写做成了 WordPress for SAE 版本,同时还上架到 应用仓库 中,这样只需要点几下鼠标,就可以在你的应用空间中,安装上 WordPress 。

1,创建一个应用。登陆之后,在 我的应用 页面中,找到右上方的 “安装应用” 。会出现如下的配置窗口。SAE 的应用安装,基于安装包(zip 格式)安装,可以直接填写网上的安装包,也可以本地上传。

2,在 应用仓库 中,找到 WordPress for SAE 的安装包地址,可以把地址填写到上面的 安装应用 表单中。其实,也可以点击右上方的 “安装应用”,直接进行安装。

3,输入一个 二级域名 和 验证码 之后,点击创建,就会告诉你已经创建成功了。现在你就可以管理这个应用了。根据提示,进行应用的初始化,就是安装 WordPress 时配置安装信息。

配置完成之后,系统会提示你安装完成。WordPress 系统就算安装完成了。你可以进入后台看一下相关配置,这个版本的 WordPress 是比较老的 ,截止到本文写作时,版本为 3.2.1。所以在安装插件的时候,需要注意插件是否支持这个版本。其中内置了几个比较常用的插件以及三个主题。下面就要进行博客数据的迁移。

转移文章等数据

文章等数据的迁移是整个迁移工作中,最简单的一个步骤。很多文章写道需要把数据库里的数据导入等等,其实不用这么麻烦,使用 WordPress 内置的工具(导入、导出)即可完成。

  1. 首先在原先的博客中,点击 “工具” -》 “导出” ,选择 “全部内容” ,点击导出。会弹出一个 xml 文件的下载。这个文件就记录了你博客上面的文章、评论、页面等等数据。
  2. 在 SAE 的博客上面,点击 “工具” -》 “导入” ,选择列表中的 “WordPress”。然后上传这个 xml 文件,将作者名等修改一下即可。注意,不要勾选 “下载远程附件” 这个项目,因为 SAE 不支持 读写操作,所以选择这个会报错。
    这个时候,文章等数据迁移完毕,打开应用首页,你已经可以看到你的文章数据了。

配置后台网站信息与之前网站完全一致

采用上面这种方法,只能迁移文章、页面、评论等数据,而无法迁移原有 WordPress 的后台设置。所以我们要打开 SAE 上的 WordPress 后台中的 “设置” 标签,把下面的内容依次重新设置一下,把它们设置的和原先博客中设置的一样。

对于图片/网站附件的处理

数据迁移通常分为两种:内容迁移资源迁移。内容迁移很简单,上面已经完成。令人头痛的是资源迁移,即 图片资源、附件资源等。潜行者 m 搜寻了很多资料来解决这个资源迁移的问题。

1,直接使用 SVN 的方式,上传到原有博客的 upload 目录中。

这是最简单的一种方式,但是有很多问题。首先,SAE 的应用代码空间,只有 100M 大小。上面通常存放代码、基础的图片等资源,不适合存储附件等。潜行者 m 博客光图片资源以及超过 100M 大小,肯定无法使用 SVN 的方式上传到 代码空间。但是对于图片附件比较少的博客来说,可以直接使用这种方法。

2,使用 SAE 的 Storage 服务

Storage 服务,是 SAE 为应用提供的专门用于存储文件的空间。容量大,下载速度快。当你使用 WordPress for SAE 写文章上传附件的时候,会自动上传到这个空间中,然后进行调用。这就相当于外链的空间了。

所以我们首先要把 资源文件 上传到这个应用的 Storage 空间中,然后修改文章中对于资源的引用,把外链修改上。上传有两种方法:

第一种手动创建目录,然后依次上传。打开应用页面,在左下方找到 “Storage”,打开之后,点击 “管理” ,然后就可以创建目录、上传文件等操作。然后,将原来文章中的资源外链修改一下,Storage 空间的外链通常为 XXX-wordpress.stor.sinaapp.com 加上目录。其中 XXX 为你的应用名称。

第二种是使用工具上传。如果附件很多,上传的工作量可想而知。所以有人就写出了上传的程序。经过搜索,找到了一个工具 SAE Mutiple Uploads 0.2 。具体的介绍和使用说明,打开他们的官方教程好了,上面说的很详细了。但是我在操作的时候,不知道为什么,没有成功。工具显示上传成功,但是我在 Storage 空间中,并没有发现我上传的资源。提供一个思路,你可以尝试一下,说不定是我的人品问题。

补充(2012.10.22)信仰飘扬 提醒,可以使用 Cyberduck 这个软件方便进行 storage 空间的管理。**
**

3,使用第三方外链服务(又拍云/华为网盘等)

只有在迁移的时候,才感觉出来外链的重要性,因为无论怎么迁移,外链是不会变的。因此,我考虑将所有资源放在外链上,然后以后就用外链链接资源。据了解,免费的网盘有部分支持图片外链,例如华为等。收费的比较好的有又拍云。最后我选择了又拍云,购买了又拍云的服务。

又拍云具体的操作流程我就不多说了,速度非常快。上传资源之后,在网上偶然发现了 荒野无灯 写的又拍云上传插件:Hacklog Remote Attachment Upyun(又拍云版)。果断激动了一下,因为这个插件,可以让你上传文件的时候,自动上传到远程的又拍云服务器上,同时还有一个非常重要的功能,可以修改数据库,将数据库里面的原有的失效资源连接,自动修正成又拍云的外链。

但是安装用了一下,还是出错,问了一下灯哥,原来是这个版本太低了,出现了这个错误。所以这个方法就留给以后的人看了,等 SAE 上的 WordPress for SAE 升级之后,就能用了。

如果想要批量修改原有失效的资源连接,可能只有像荒野无灯写的插件那样,对数据库进行修改。否则只能一篇文章一篇文章的进行修改。如果你有更好的办法,希望能回复交流!

补充(2012.10.21):Denis 提供了一个解决这类问题的好方法,即使用插件 Search & Replace 批量对数据库里面的图片链接进行修改。

在 WordPress for SAE 中安装主题和插件

由于 SAE 禁止了读写操作,所以安装主题和插件,无法向以前那样,直接在后台进行上传或者远程安装。必须要通过 SVN 的方式上传。默认的安装了 WordPress for SAE 之后,并没有开启 SVN 服务,因为开启 SVN 服务,需要花费一些资源,所以要消耗一些云豆。我们在后台左侧找到 “代码管理” 然后点击 “创建 SVN 库” 就开启了 SVN 服务,之后根据 SAE 的说明文档使用即可。安装主题和插件,只需要把主题和插件复制到相应的目录,然后 SVN 上传一下即可,和使用 FTP 一样。但是要注意,主题和插件中的功能不能有 读写操作 等 SAE 不支持的功能,否则可能出现意外情况。

将域名解析到 SAE

现在文章等内容、图片等资源都已经迁移过来了。现在要检查一下迁移之后的网站和原先的网站还有什么地方不同。所有的地方都必须丝毫不差才可以。特别是 “固定链接” 等等,如果有不同,会导致收录等问题。

当你觉得完全相同,在迁移之后,就要把域名解析到 SAE 中。在管理后台找到左侧的 “应用管理” 打开之后,在下面会有独立域名设置。由于 SAE 比较特殊,所以它暂时不支持备案,如果你的域名是备案过的,那么需要填写备案表格,向 SAE 提交申请。如果你的域名没有备案,SAE 支持绑定到国外的合作伙伴那里,然后做一个跳转。比较简单,所以不再多说。

这两种方案区别很大,备案域名直接接入服务器,ping 值只有 50MS 左右,响应速度和 百度 差不多,下载速度也非常快。绑定到国外的未备案域名,通过香港节点访问,ping 值有 160 MS 左右,下载速度略慢,相当于高质量的香港空间,但是要消耗两倍的流量,也就是交两倍的钱。

转移之后的 SAE 优化

鉴于大部分的同学的网站都是没有备案的,但是要花两倍的钱,所以我们就要进行优化。优化的重点就是减少 SAE 流量的损耗。一般通过三个方法进行优化:

  1. 开启 gzip。开启 SAE 的 gzip 教程,请看这里:开启 SAE 的 Gzip 压缩为 WordPress 提速
  2. 压缩图片、CSS、JavaScript 等文件,尽量使用外链。
    完成这些步骤之后,可以尽量的避免系统资源的消耗,这样就可以节省云豆。同时,你还可以开发应用,进行开发者认证,这样每月都会送你一些云豆。如果你流量不大的话,这样几乎都成了免费的了。

WordPress的6种固定连接优缺点对比

有人说 WordPress 的 SEO 做的比较好,我想这个和 WordPress 可以方便的自定义文章的固定链接有分不开的联系。在众多的 WordPress 博客中,有很多种的固定连接,本文就是把这些固定链接的形式和效果跟大家分析一下,然后根据你自己的需求,选择适合你博客的固定连接。

默认固定链接样式

没有在后台的 “设置-》》固定链接” 中设置链接样式的话,就属于默认的固定连接样式,它的形式如下

http://www.qianxingzhem.com/?p=123

优点

  1. 链接短小
  2. 移植性好,当 WordPress 搬家时,新主机万一不支持 Rewrite 模块,你不需要进行301定向

缺点

  1. 缺乏语义性,对搜索引擎收录稍稍有影响,但是不大

日期、月份和名称链接样式

这是官方默认的链接样式,分日期、月份和名称两种,形式如下

http://www.qianxingzhem.com/2012/09/11/sample-post/
http://www.qianxingzhem.com/2012/09/sample-post/

优点

  1. 语义性增强,增加了文章发布时间和文章名称
  2. 文章发布时间和文章名称在链接中,有利于搜索引擎理解

缺点

  1. 生成的链接长度太长,不利于发送等
  2. 文章标题直接显示在连接中,有的时候并不希望这样

名称型样式

直接加一个文章名称,形式如下

http://www.qianxingzhem.com/sample-post/

优点

  1. 语义性强,文章名称在链接中,便于搜索引擎理解

缺点

  1. 生成链接长度过长,中文链接会被编码,链接乱且长

关键词类型链接样式

将文章中的关键词提取出来,然后自定义固定连接,用“-”链接关键词,很多高手博客使用这种链接,样式如下

http://fairyfish.net/m/limit-login-attempts/

优点

  1. 语义性强,便于搜索引擎理解
  2. 生成链接长度合适

缺点

  1. 需要博主有一定的英语水平和耐心
  2. 对中文博客的效果不大,几乎没有中国人会搜索一个英文单词来看你的中文文章

数字型链接样式

直接把文章的ID写在链接中,样式如下

http://www.qianxingzhem.com/123

优点

  1. 链接极短

缺点

  1. 没有任何语义性

数字型语义增强版链接样式

不仅仅是文章 ID 还增加一些英文单词,例如:post、archives等,形式如下

http://www.qianxingzhem.com/archives/123
http://www.qianxingzhem.com/post-1268.html

优点

  1. 链接较短
  2. 增加了关键词,便于搜索引擎理解这个页面是一篇文章

缺点

  1. 语义性不是非常明确
    目前,潜行者m博客用的就是这种 数字型语义增强版 固定链接样式。

如何自定义博客固定链接

了解结构标签

WordPress 设置了一系列的固定链接结构标签,来让你定义固定链接,具体标签及功能如下

  • %year% 文章发表的年份,四位数,如 2004
  • %monthnum% 月份,如 05
  • %day% 天,如 28
  • %hour% 小时,如 15
  • %minute% 分钟,如 43
  • %second% 秒,如 33
  • %postname% 文章标题的别名 (编辑文章/页面时的别名栏)
  • %post_id% 文章的唯一ID,如 423
  • %category% 分类的别名 (新建/编辑分类时的别名栏)
  • %tag% 标签的别名(新建/编辑标签时的别名栏)
  • %author% 作者的别名
    之后,我们需要打开后台 “固定链接设置” 页面,找到 “自定义链接结构” 根据自己的需求,写上链接结构,加上结构标签。例如潜行者m博客用的链接样式
    http://www.qianxingzhem.com/post-1268.html
    在后台自定义链接结构时,需要定义成
    /post-%post_id%.html

其他注意事项

固定链接在 WordPress 博客中非常重要,强烈建议在建博初期就确定下来,而且之后不要再更换。如果你更换了固定链接,之前的固定链接打开之后,就会出现404错误,影响搜索引擎收录。

当然,如果你迫不得已更换博客的固定链接,请安装相应的 301链接重定向 插件,使用插件将之前的固定链接重定向到更新后的固定链接上。这类的插件比较多,这里我推荐几个:Simple 301 Redirects、Redirection等。

关于 WordPress 固定链接更详细的说明,请看官方文档 :zh-cn:使用固定链接

解决 wp 首页无法显示摘要而显示全文的方法

不知道什么时候(可能是某次升级),首页就乱套了,原因很简单,以前显示文章摘要的地方,现在把全文都显示出来了,即使是官方默认的模板也不行。

如图:


这样的话,页面就非常乱了。有的文章很短,有的文章很长,而且把文章全文都显示出来,而且还带有图片,使得页面非常不协调。

我查找官方的模板手册,寻找输出文章的函数,一个个尝试,也没有用。后来我不停的换模板,但是除了 wpbus 的 D4 模板之外,其他模板都不行,包括官方的。D4 模板显示图:

这样就美观多了,还是 wpbus 的模板写的质量高啊,代码考虑到方方面面了。但是我不喜欢用他们的模板。太大太过于臃肿,而且为了防止盗取代码,还写的很复杂,很多文件,导致执行效率比较低。特别是网速慢的时候,刚刚打开的时候,页面是乱的,过会才居中正常。于是,就看看他们的代码是怎么写的,把代码引用一下就好了。

打开 D4 模板,顺着模板文件找,果然,老是用 include 包含过来包含过去的,扰乱分析。不过我还是很快分析出了用于显示这个的代码。废话不多说,贴出这句代码。

<?php echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,\$post->post_content)), 0, 230,”…”); ?>
可能是我 php 自学的太烂,没见过这几个函数,于是便在网上搜了一下这几个函数的功能。

1,apply_filter() 这个函数是一个过滤函数,用于过滤数据。一般是对前台的模板函数进行操作的。

2,strip_tags() 这个函数用于剥去 HTML、XML 以及 PHP 的标签,经过这个函数的数据,里面的标签就没了。这样呢,就把文章内容整理了,把那些特殊的格式以及图片什么的去除了。这样显示的就是纯文字。

3,mb_strimwidth() 这个函数是用来截取置顶长度的字符的。使用方法:
mb_strimwidth(string $str,int $start,int $width[,string $trimmarker[,string $encoding]])
参数说明:
$str //指定字符串
$start //指定从何处开始截取
$width //截取文字的宽度
$trimmarker //超过\$width 数字后显示的字符串
通常用于截取字符整理版面用的。