Перенос записей из wordpress в hexo-блог

WordPress Hexo

С 2013 года я использую WordPress для создания своего личного блога.За четыре года я написал около 50 статей, описывающих некоторые проблемы и решения, с которыми я сталкивался в повседневной разработке.В то же время я сделал несколько серий технологий , поделиться. Хотя количество постов в блоге не очень велико, каждая статья написана с большим раздумьем, и недавно я задумался о проблеме ведения блога и частого обновления блогов.

WordPress — любимая система ведения блогов PHPer, а также очень популярная система управления CMS во всем мире.Ее преимущества заключаются в частых обновлениях и итерациях, мощных функциях и значительном количестве доступных тем и плагинов. Но недостатком является то, что внешний рендеринг относительно медленный, а некоторые библиотеки cdn и аватаров ссылаются в фоновом режиме.Если вы не настроите его должным образом, опыт написания статей в фоновом режиме будет довольно плохим. В последние годы hexo постепенно набирает обороты, благодаря методу написания уценки и статическим характеристикам публикации он стал фаворитом большинства блоггеров. Исходя из этих соображений, у меня возникла идея перенести свой блог с wordpress на hexo. Следующий контент описывает этот процесс миграции. Друзья, у которых такие же потребности, могут использовать его как ссылку, отказаться от пит из wordpress и отдать его в объятия hexo~

Загрузить фотографии в Qiniu

В статьях, написанных в wordpress ранее, все изображения, содержащиеся в них, добавляются с использованием мультимедиа wordpress, поэтому ссылки доступа к изображениям в основном аналогичны.http://idoubi.cc/wp-content/uploads/2017/08/01/abc.jpgТаким образом, чтобы после переноса блога картинки отображались нормально, вам нужно написать скрипт для загрузки картинок в медиапространство wordpress в Qiniu, а затем заменить ссылки на картинки, содержащиеся в статьях, в пакетном режиме.

  1. Представляем Qiniu SDK

    composer require qiniu/php-sdk
  2. Напишите скрипт для загрузки локальных изображений в Qiniu

<?php  

require_once './vendor/autoload.php';

use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

$accessKey = 'RKassuWW4TB4_xxxxxyyyyyQj2iLEIBq9GSGs8E';
$secretKey = '6iVWfPayYPhosxxxxxyyyyyO909Wp6GsV0oOt';
$bucket = 'idoublog';

$auth = new Auth($accessKey, $secretKey);

$token = $auth->uploadToken($bucket);

$uploadManager = new UploadManager();

// 批量上传图片
$basePath = 'D:/phpStudy/WWW/project/idoubiblog/wp-content/uploads/';
$fileDir = 'D:/phpStudy/WWW/project/idoubiblog/wp-content/uploads';
$files = getUploadFiles($fileDir);

$successCount = 0;
$failCount = 0;
foreach ($files as $k => $v) {
    $key = str_replace($basePath, '', $k);
    $file = mb_convert_encoding($v, 'gbk', 'utf8');            // 对文件路径进行转码,防止文件名为中文时出现的乱码问题

    list($res, $err) = $uploadManager->putFile($token, $key, $file);
    if (empty($err)) {        // 上传成功
        $successCount++;
    } else {                // 上传失败
        $failCount++;
        var_export('上传失败:' . $v);
        echo "\r\n";
    }
}
echo "上传成功:{$successCount}个,上传失败:{$failCount}个";

// 获取所有需要上传的文件
function getUploadFiles($dirPath) {
    $files = array();
    $scanFiles = myScanDir($dirPath);
    foreach ($scanFiles as $ak => $av) {
        if (is_array($av)) {
            foreach ($av as $bk => $bv) {
                if (is_array($bv)) {
                    foreach ($bv as $ck => $cv) {
                        $files[$cv] = $cv;
                    }
                } else {
                    $files[$bv] = $bv;
                }
            }
        } else {
            $files[$av] = $av;
        }
    }
    return $files;
}

// 遍历文件夹下面的文件
function myScanDir($dirPath) {
    $files = array();
    if (is_dir($dirPath)) {
        if ($fp = opendir($dirPath)) {
            while (($file = readdir($fp)) !== false) {
                if ($file != '.' && $file != '..') {
                    $filePath = $dirPath . '/' . $file;
                    if (is_dir($filePath)) {
                        $files[] = myScanDir($filePath);
                    } else {
                        $files[] = iconv('gbk', 'utf-8', $filePath);        // 对文件路径进行转码,防止文件名为中文时出现的乱码问题
                    }
                }
            }
        }
    }
    return $files;
}

экспорт данных вордпресс

  1. Пакетная замена адресов изображений, содержащихся в статьях базы данных

    update wp_posts set post_content = replace(post_content, 'http://idoubi.cc/wp-content/uploads/', 'http://qiniu.idoubi.cc/');
  2. Экспорт XML-файла в фоновом режиме WordPress

установить гексо

npm i -g hexo-cli
hexo init idoublog

Перенести данные в hexo

  1. Установите плагин миграции

    cd idoublog
    npm install hexo-migrator-wordpress --save
  2. Измените плагин (чтобы предотвратить проблему искаженных заголовков статей после импорта данных)

    # 在node_modules/hexo-migrator-wordpress/index.js的63行位置加上
    if (slug) slug = decodeURI(slug);
  3. Импорт данных

    hexo migrate wordpress /path/to/wordpress.xml

Установить тему

  1. форк темы

    https://github.com/yscoder/hexo-theme-indigo
  2. Установить тему

    cd idoublog/
    git submodule add git@github.com:mikemintang/hexo-theme-indigo.git themes/indigo
  3. Измените конфигурацию темы и отправьте ее в репозиторий темы fork.

Сгенерированное содержание

hexo generate

локальный предварительный просмотр

  1. Установите плагин синхронизации браузера, вы сможете синхронизировать превью при написании статей

    npm i hexo-browsersync --save
  2. с предварительным просмотром порта

    hexo s -p8031

Опубликовать контент

  1. Настройка среды публикации

    deploy:
    type: git 
    repo: https://github.com/mikemintang/idoubi.cc
    branch: master
  2. Опубликовать контент

    # 执行此命令后,博客静态内容会发布到https://github.com/mikemintang/idoubi.cc
    hexo deploy

Содержимое блога по синхронизации с облачным сервером

  1. Инициализировать папку проекта для синхронизации содержимого блога

    mkdir /idoublog
    cd /idoublog
    git init
    git remote add origin https://github.com/mikemintang/idoubi.cc.git
  2. Написать сценарии оболочки автоматической синхронизации
    vi /shell/deploy_idoublog.sh

#!/bin/sh

cd /idoublog
git pull origin master
  1. Запланированное выполнение сценариев оболочки
    crontab -e
*/1 * * * * /bin/sh /shell/deploy_idoublog.sh

После ряда шагов, описанных выше, мой блог был успешно перенесен с wordpress на hexo. Теперь я могу вести блог локально с возвышенным и выполнятьhexo deploy --generateкоманда, содержимое блога будет автоматически синхронизировано сidoubi.cc/