PJBlog升级为WordPress

Wordpress相关文章

本文最后更新于2015年8月24日,已超过半年没有更新,如果内容失效,请反馈,谢谢!

五一假期,把我的“流浪天下”博客网站翻新了一下,从PJBlog更换成了。本文记录一下PJBlog 3 转 wordpress 3 的整个过程,另外记录一下使用的wordpress和一些修改记录,便于以后查找。

PJBlog
从2006年11月10日至今,PJBlog已经使用将近了6年半的时间,从2.6版本到现在3.2版本。PJBlog是一个非常优秀而、简单而且免费的ASP博客建站系统,可以支持动态、静态和伪静态。非常感谢这些年来默默无闻为PJBlog作过贡献的开发人员和团队,虽然近些年基本没有更新,但我也衷心祝愿PJBlog4能够走得更好。


其实很早以前就知道这套PHP的全球使用人数最多的博客系统,只是对PHP一直望而生畏。wordpress其实不怎么适合我,我还是喜欢轻量化一些的程序,太折腾的事伤不起。对于WordPress这套博客程序,从运行环境、PHP语言、MySQL数据库等这些全靠摸索。所以五一这几天基本上把WordPress系统和MySQL安装更新了十几遍。

PJBlog to WordPress转换

这次能够比较完美地从PJBlog 3.2.9转换成WordPress 3.5.1程序,首先得感谢 情留蚊子 制作的PJ2WP转换工具。工具名字叫“PJBlog3_到_WordPress_升迁工具”,就一个文件mt.asp。这个工具可以比较完美地转换文章、文章摘要、浏览量、评论、友情链接、留言本。只是日志的顺序是否有变化。但情留蚊子网站上似乎已经没有提供下载了。这里提供一个备份,点这里下载 PJblog3 to WordPress升迁工具

PJBlog3到WordPress3具体转换方法如下:
1) 使用XAMPP搭建WP本地调试环境。点这里 下载 XAMPP 最新版

2) 从wordPress官方网站下载并安装好一个全新的WordPress程序,添加一个新页面作为留言本,记下ID。我看蚊子的转换代码如果不添加留言本页面的话应该会自动创建一个新页面。我这里是直接使用的wordPress安装时创建的Hello world文章,在数据库里面改成了页面。ID就是1。

3) 在wp中安装WP-PostViews插件,这是转换浏览量用的。

4)下载上面提到的PJBlog3_到_WordPress_升迁工具。将下载的转换工具解压,只有一个文件:mt.asp。用文本编辑工具将此文件中的多种http://www.94qing.com/改成自己的博客地址。如果你是在流浪天下网站下载的PJBlog3到WordPress升迁工具,mt.asp文件中已经改成了http://maie.name/,这里要替换成你自己的网站地址,这个主要是涉及到上传的附件和图片访问。经测试,经过防盗链的附件地址似乎有些问题。

5)把mt.asp放到pj3博客程序根目录,访问 http://yourdomain.com/mt.asp ,需要设置数据库表前缀,默认为WP_可不用改;留言本ID填写刚才新建页面的ID;勾选已经安装 WP-PostViews 插件,这是转换浏览量的,如果没安装或者没启用PostViews插件,浏览量是无法写入数据库的。然后分别点下面的2个按钮,会得到一个mt-export.txt和一个pjtowp.sql文件。前者为所有的文章数据、文章摘要、作者和评论;后者为文章访问量、友情链接和留言数据。

6)打开txt和sql文件再次确认。这里主要应该打开Pjtowp.sql文件查看一下。此文档为SQL操作语句,用记事本可以打开。为便于代码高亮浏览可以用 Dreamwaver 或者 NotePad++ 这样的文本编辑程序打开。如果文档中有大量的 ‘ 符号就要注意了,因为导入的浏览量数据是通过文章标题来查找ID,所以导入数据库时可能出错,把所有的'替换为‘(英文半角单引号)。同时还要注意,如果文章标题或者文章评论内容中有‘单引号出现,要在这个文档中删除(使用高亮的编辑器可以看出来),否则导入数据库也会出错。替换后的代码类似如下:

update wp_postmeta set meta_value=2997 where post_id=(SELECT ID FROM wp_posts WHERE post_title='故宫印象') and meta_key='views';

7)登录WordPress后台,选择工具-》导入-》Movable Type 和 TypePad-》,未安装就安装,安装了就上传刚才的mt-export.txt文件(注意大小不能超过设置)。首先会自动识别作者信息,弹出一个替换表,如果所有的作者都是英文最好,如果有中文的作者信息,请替换成一个英文名字。点击之后才开始文章的正式导入,如果日志多,要等待一会。导入进度会即时看到,完成会有提示。

8)如果上一步骤成功完成,现在通过phpMyAdmin进入mysql,选择你的数据库,把pjtowp.sql文件导入到数据库。如果出错要看下是不是哪一行的’单引号没有替换掉。如果没有出错,这样基本上完美转换了。

WordPress更新记录

简单记一下 wordpress 版的博客版本升级更新时间。

  • 2013-5-6,从 PJblog 升级到 wordpress 3.5.1 简体中文版。
  • 2013-06-22,从后台自动升级到 wordpress 3.5.2 简体中文版
  • 2013-08-01,通过后台升级为3.6英文包,从 SVN 上下载语言包并手动翻译补充。
  • 2013-11-04,通过后台升级为3.7。
  • 2013-12-13,通过后台升级为3.8。
  • 2014-04-16,通过后台升级为3.9。

WordPress优化记录

流浪天下本站使用wordpress后主要优化记录这里作一个备注:

无插件实现页面和Feed相关文章、文章底部版权
由于PHP代码不熟悉,这次使用WordPress建站也主要是使用插件。这也要感谢 佐仔志 的佐兄,这位素见面的仁兄不吝赐教了很多WordPress优化的代码和信息,在此特别感谢一下!

默认发件人
WordPress 带有 E-mail 发送功能(默认是通过php的mail()函数,在 Linux 主机上完美运行,在 Windows 主机上需要安装一个额外的SMTP插件),但默认的发件人为 WordPress,发件人邮箱为 WordPress@yourdomain ,没个性不说,而且不利于用户的站长的联系。(via CodeCTO

代码如下:


// 更改默认发信地址
add_filter('wp_mail_from','mail_from');
function mail_from() {
$emailaddress = 'Example@Example.com'; //你的邮箱地址
return $emailaddress;
}
// 更改默认发信人名字
add_filter('wp_mail_from_name','mail_from_name');
function mail_from_name() {
$sendername = '你的名字'; //你的名字
return $sendername;
}

通过smtp发送邮件设置

2013-06-01备注:上述设置后,邮件发送的域为@localhost.localdomain,直接被腾讯QQ邮箱系统拦截,无法收到信。交涉多次未果。在php.ini中的sendmail_path =中加上-fxxx@xxx.xxx的设置后仍然被拦截,没有办法了,遂下载了一个wp Mail SMTP插件,使用SMTP发送。SMTP发送需要通过fsockopen或pfsockopen。大家说fsockopen不安全,因此需要将默认的fsockopen改成pfsockopen。

找到wp-includes/class.smtp.php 文件
把@fsockopen 改成 @pfsockopen

如果pfsockopen被主机商禁用,需要查看php.ini文件同否是放在disable_functions =中的。

改为SMTP发送后,整个世界清静了…

文章内容分页美化
小兵博客

使用又拍云JS库CDN加速jquery
20130517修改主题目录下的的function.php文件,添加如下代码:

if( !is_admin()){
wp_deregister_script('jquery');
wp_register_script('jquery', ("http://upcdn.b0.upaiyun.com/libs/jquery/jquery-1.8.3.min.js"), false, '');
wp_enqueue_script('jquery');
}

wp_register_script的最后一个参数是在最后加载脚本,可以改成true,就是在最后加载了。(via licess)

启用GZIP压缩
zlib.output_compression = On

干掉cnzz统计
20130517暂停了很多年的CNZZ网站统计与分析代码。因为发现老是加载一个阿里的服务。先干掉再说。

文章目录索引TOC
有很多TOC的插件,这里用了 ludou 提供的代码,特此感谢。在此代码上加了一个判定,只在singal页面显示。
此TOC文章目录索引不支持Ajax隐藏效果。
如果使用自动截取文章前xx个字符作为description,会截取到TOC文章目录索引的内容,需要在Function中加一段代码先禁用TOC,截取字符后再加上TOC。方法来自ludou。

remove_filter( 'the_content', 'article_index' );
echo 你的description输出代码;
add_filter( 'the_content', 'article_index' );

分页导航
默认的文件列表、文章目录、文章检索页面分页显示方式实在是不好,无力吐槽了。无插件实现文章列表分页导航,用的 zmingcx 分页函数,这个函数效率如何还不知道,待观察。CSS直接使用的文章内容内分页显示代码。(20130528)

底部统计代码

页面底部增加统计代码:建站时间、文章数、评论数、浏览量。因以前用PJblog有此功能,一直很怀念。感谢 勺子 提供统计代码。(总浏览数函数 via 阿邙)。(20130531)

作者信息优化

博客多人作者页面显示优化,删除yim,aim,jabber,添加微博、QQ空间等内容。(2013-6-17,via 我爱水煮鱼

博客侧边栏跟随滚动效果
使用MG12的侧边栏跟随滚动插件,因使用中发现有些问题,顶部会重叠,现在禁用。(via neoease

禁用自动草稿和修订历史
使用xiaoxia提供的禁用自动草稿和修订历史代码,并自动保留最后一个ID。原理为:如果新建文章或上传图片就获取数据库中最后一条有用记录(状态为 publish、draft 或 private 的文章或状态为 inherit 且类型为 attachment 的行)的 ID,并把之后的无用行(状态为 auto-draft 的文章,状态为 inherit 且类型为 rivision 的文章)删除掉,再重设自增。这样无论如何新建文章,数据库中最多有且仅有一条 auto-draft 记录(WordPress 刚刚创建的行,保存之后状态变为 publish、draft 或 private),这样文章 ID 就能连续了。(20130721)

用.htaccess禁止IP访问网站
直接在.htaccess文件后面加入

order allow,deny 意思是只要deny的IP就不能访问,不管是否allow了(或者写成order deny,allow 只要allow的IP就可以访问,不管是否deny了,此未测试)
deny from xxx.xxx.xxx.xxx 这些是禁止的IP
deny from xxx.xxx 可以这样写
deny from xxx.xxx yyy.yyy.yyy.yyy 可以写在一起,也可以支持CIDR方式
allow from 61.135 64.233 允许的IP,可以不写,也可以写搜索引擎蜘蛛啥的
Allow from all 其它都允许

然后受限IP访问就会403
貌似要在 Apache or 虚拟主机配置文件中设置 AllowOverride Limit 才生效

利用.htaccess拒绝spam机器人评论
由于很多 Spam 机器人直接读取 WordPress 程序核心文件 wp-comments-post.php 实现自动留言,因此有必要在 .htaccess 中添加检测无 referer 来源的 spam 机器人,查询访问网站的来源链接,阻止其通过 wp-comments-post.php 来进行垃圾评论。代码如下:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

(Maie via WPRecipes,2014-02-24)

修改 Google Fonts 源
由于众所周知的原因,将 WordPress 后台的 open-sans 字体加载源从 Google Fonts 换为 360 CDN。以下代码可以替换 WordPress 后台和 wp-login.php 页面的 Google Fonts。(via WordPress 大学,2014-5)

function wpdx_replace_open_sans() {
  wp_deregister_style('open-sans');
  wp_register_style( 'open-sans', '//fonts.useso.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600' );
  if(is_admin()) wp_enqueue_style( 'open-sans');
}
add_action( 'init', 'wpdx_replace_open_sans' );

流浪天下使用的插件

独立存档 使用WP-EasyArchies插件 点击次数 使用Post views插件 评分 使用Post Ratings插件 侧边栏随机文章、评论、链接 使用WP Kit CN插件 页面摘要显示 使用 WP UTF8 Excerpt 插件。(20130718已不使用)使用常时阳光的简易插件。(via cyatimes禁止Auto-Save、post revisions 使用WP Admintools 插件(已停用插件) 禁止站内PingBack评论 使用no self ping 插件。暂时停用,已经全站关了pingback。 多说评论 垃圾评论太折腾了,用了社会化多说评论,一个插件可以顶转载、ajax加载评论、国内网站社会化头像、垃圾评论防护等顶几个插件不知道划算不。因多说评论上传用户信息,及评论通知不能自定义,暂时取消。 301重定向 PJBlog转wordpress之后,原来搜索引擎收录的地址变了,原来是asp动态地址,现在是html伪静态地址,搜索引擎的收录内容全是404了。用了Redirection插件,发现某些固定的地址可以301重定向,但是用正则表达式批量重定向就不知道肿么弄了。301重定向的正则表达式不会弄啊。后来几经折腾,发现应该这样设置: ID重定向:

例如原地址为:/default.asp?id=123,新地址为/123.html。
则301重定向正则表达式为:
原始URL:^​/article.asp\?id=([0-9]*)$
目标URL:/$1.html
或者写成:^​/article.asp\?id=(\d*)$
同时别忘了做^​/default.asp\?id=([0-9]*)$的重定向

tag重定向:

原地址为:/default.asp?tag=xxx,新地址为/tag/xxx
则301重定向正则表达式为:
原始URL:^​/default.asp\?tag=(.*)$
目标URL:/tag/$1

如果原始url有中文(转义字符)、英文、数字啥的,比如这样的:default.asp?tag=%E4%BA%8B%E6%95%85&distype=list
可以用这句进行匹配:^​/default.asp\?tag=([%a-zA-Z0-9]*)&distype=(.*)

归档文章重定向:

原始URL:default.asp?log_Year=2007&log_Month=7&log_Day=2
目标URL:^​/default.asp\?log_Year=([0-9]*)&log_Month=([0-9]*)&log_Day=([0-9])(.*)

点这里查看在线正则表达式测试工具
但是,由于年少不懂事,转wordpress的时候把ID整乱了,所以直接将ID重定向还是不妥,所以你们如果在转换的时候切记不要把ID整乱了!
(20130718不知肿么就出问题了,用不了了,已卸载。)

限制登录重试次数Limit Login Attempts
Limit Login Attempts可以限制登录重试的次数,包括Cookies和IP。点这里下载Maie汉化的语言包。(20130714)

Hacklog Remote Attachment远程附件插件
使用荒野无灯Hacklog Remote Attachment Upyun(又拍云版) v1.4.4。(20130718 via荒野无灯

生命不息,折腾不止!

除非注明,流浪天下 文章均为原创,转载请以链接形式注明出处。
本文链接地址:
订阅本站:http://maie.name/feed投稿联系:m[at]maie.name

猜你也喜欢:

共有 14 条评论

  1. 一个错误发生在服务器在处理URL。 请与系统管理员联系。
    如果您是系统管理员,请点击在这里找到更多关于这个错误。

  2. 我讨厌’多说’,一是邮件地址收集器,二是有人留言或回复时邮件显示的寄件人名字为多说网的,对博客没有宣传作用,像我博客那样,如果我回复你的评论的提醒邮件的发件人是佐仔志,达到宣传效果。三是有可能被邮件系统默认为垃圾邮件,因为不是每一个人都喜欢,会被注为垃圾邮件。

    以上是我讨厌多说的原因。再者国人有多少使用第三方ID登陆呢?

    1. 好嘛,那我把多说去掉了。反正我这网站访问人数也不多,评论也少,如果没有垃圾评论的话。

      1. 你的是不是管理员帐号与写文章的帐号分开的?
        我的是二合一的。不知是不是这样的原因我的才不显示。

        1. 我看了一下,在主题content文件下面有这样一句话:
          If a user has filled out their description and this is a multi-author blog, show a bio on their entries.
          应该是填写了个人信息且是多作者时才显示,你把这个文件里面的多作者判断删除应该就可以显示了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注