迫于找不到合适的模板,用一天时间diy了一个,顺便更换了新的博客系统

此次博客从Wordpress 迁移到了typecho。

更换博客的动因:

我觉得博客的价值在于内容,但是模板这些也很影响体验。我理想中的博客系统,应该是简洁的、支持markdown的;理想中的模板应该是hexo那种简约的,体验良好的,加载速度上应该是极快的。由于博客最开始用的wordpress系统,但是我找遍了全网模板,却发现都是花里胡哨的。而随着访问量的增加,为了提升创作和阅读体验,我决定迁移到typecho,但是typecho也没有找到满意的模板(可能是我懒),索性自己diy一个。

我喜欢typecho的原因:

  1. 简洁、轻巧
  2. 原生支持markdown编辑器
  3. 方便diy模板
  4. 国产

DIY过程

首先下载的typecho的程序放到本地开始修改,发现官方自带的模板就很简洁,于是基于官方的模板开始做了如下更改:

细节修改与阅读体验增强:

  1. 全局背景颜色修改,偏淡黄色
  2. 全局字体增大
  3. 更换了字体,使字体接近于宋体
  4. 修改了很多细节部分的字体大小
  5. 代码高亮使用heightlight.js 并且选用了 StackOverflow-light风格
  6. 标签高亮底色修改

排版上的修改:

  1. 文章页面增加相关文章,增加文章版权信息等。
  2. 首页排版分为左右两栏,左栏仅展示最新文章、体检阅读,右侧展示分类信息和登录与rss等。
  3. 搜索结果与分类等页面,修改为仅展示 文章的时间与标题
  4. 默认的每页数量,从5修改到9(9是阳数,10不是)

迁移工作
鉴于wordpress已经被机器人搞的充满了垃圾评论(即便开了邮箱验证),决定只迁移文章及其图片即可。
但是,官方的迁移插件还停留在2014年,好在typecho的表结构比较简单,自己摸索写了一段PHP,完美迁移。
图片的迁移,将/wp-content/uploads/下的内容放到/usr/uploads/即可,然后再执行一段sql。

update typecho_contents set text=replace(text,'wp-content/uploads','usr/uploads')

减少SEO损失
更换系统与模板,是不利于SEO的,如果你的连接全部变了,那就得蜘蛛重新索引一遍。
为了降低SEO损失,特意做了如下处理:
原wordpress的文章格式为 /?p=id

  1. 在后台修改typecho的格式为,/index.php/archives/{slug}.html,其中的slug已经在导入文章的时候做了对应。
  2. 配置nginx的重写规则,隐藏/index.php,路径变为/archives/{slug}.html
  3. 编辑index.php,如果接收到一个参数p,则301跳转到对应的typecho路径。
if(isset($_GET['p'])){
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://leehongtao.com/archives/' . $_GET['p']. '.html'.$request_uri);
    exit;
}

这样以来,就完美将原搜索引擎索引的地址,跳转到了博客现在对应的内容。

最终效果图:

更换前:

更换后首页:

将wordpress中的文章,转移到typecho

运行环境 php7.0 +

<?php
$servername = "localhost";
// 创建连接
$typecho = mysqli_connect($servername, "root", "pass", "lookcos_cn");
$wordpress = mysqli_connect($servername, "root", "pass", "lookcos_cn");


function insert(mysqli $con_typecho, $cid, $title, $timestamp, $content){
    $content = mysqli_real_escape_string($con_typecho,$content);
    $sql1 = "INSERT INTO `typecho_contents` (`cid`, `title`, `slug`, `created`, `modified`, `text`, `order`, `authorId`, `template`, `type`, `status`, `password`, `commentsNum`, `allowComment`, `allowPing`, `allowFeed`, `parent`) VALUES 
    ('{$cid}', '{$title}', '{$cid}', '{$timestamp}', '{$timestamp}', '{$content}', '0', '1', NULL, 'post', 'publish', NULL, '0', '1', '1', '1', '0')";
    // 尝试插入数据
    if (mysqli_query($con_typecho, $sql1)) {
        echo $title."    新记录插入成功</br>";
    } else {
        echo "Error: " .$title. "<br>" . $con_typecho->error;
    }
}

// 从wordpress 中读取内容
$sql = "SELECT ID, post_date, post_title, post_content FROM lookcos_posts WHERE post_type='post'";
$result = mysqli_query($wordpress, $sql);
if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo $row['ID']."  ".strtotime($row['post_date'])." ".$row['post_title']. " "."</br>";
        if($row['post_content'] && $row['post_title']){
        insert(
            $typecho,
            $row['ID'],
            $row['post_title'], 
            strtotime($row['post_date']), 
            $row['post_content']
            );
        }
    }
}
mysqli_close($wordpress);
?>

标签: none

分类: 所有文章

已有 10 条评论

  1. 真能折腾……

  2. 相比以前快的不是一星半点。

    1. 看来老哥,是位老朋友了。

  3. 大峰 大峰

    这个打开速度相当快

  4. typecho你值得拥有,个人博客非常适用。

  5. 我觉的越简单越好,清爽,速度快!

  6. 李梦溪 李梦溪

    绝了也是,我在v2看到你的贴子,就想着在本地由wp迁移到typ,然后报错,找方案,兜兜转转由看到了你的帖子

添加新评论