web建站教程
  1. 首页
  2. vuejs
  3. js
  4. 好玩
  5. seo教程
  6. 前端知识
  7. 百度echarts
  8. 更多
    php入门
    nodejs
    mockjs
    reactjs
    mysql
    wordpress
    织梦cms
    帝国cms
    git教程
    IT知识
    模板大全
    休息站

织梦cms数据转换wordpress流程介绍

652 ℃
           

1、新建wordpress站点

我们可以在当前的站点中,新建一个以WordPress程序内核的站点。我们的目的是需要将DEDECMS程序数据迁移到WP,转换成WP支持的数据库,我们有数据库和URL地址保持不变,那就不用担心,当然有些情况,比如TAG和一些功能可能会缺失,当然还是有一些遗憾的,但是至少我们的文章URL不变,这个已经解决我们大部分的问题。

2、在wordpress根目录下新站dedecms_to_wordpress.php文件,代码如下:

<?php
 
// DedeCMS的数据库配置,内容与DedeCMS的这个配置文件内容相同:  data/common.inc.php
// ------------------------------------------------------------------------------------
// 以下 需要修改为你自己的
$cfg_dbhost      = 'localhost';
$cfg_dbname      = 'nxdb';        //库名
$cfg_dbuser      = 'root';        //数据库用户
$cfg_dbpwd       = 'root';        //密码
$cfg_dbprefix    = 'dede_';       //DEDE系统配置的 表前缀
$cfg_db_language = 'gbk';         //取值有两种 gbk 或者 utf8,具体决定于安装的DedeCMS的版本
$cfg_db_port     = 3306;
 
 
// ------------------------------------------------------------------------------------
// 以下为迁移程序,不要修改。
// ------------------------------------------------------------------------------------
require __DIR__ . '/wp-load.php';
 
function showlog($msg)
{
    printf("[%s] %s\n", date('Y-m-d H:i:s'), $msg);
}
 
$dede_db = null;
 
// 检查DedeCMS的数据库连接是否正确
function check_dede_config()
{
    global $cfg_dbhost, $cfg_dbuser, $cfg_dbpwd, $cfg_dbname, $cfg_db_port, $cfg_dbprefix, $cfg_db_language;
    global $dede_db;
 
    $dede_db = new mysqli($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd, $cfg_dbname, $cfg_db_port);
 
    if ($dede_db->connect_errno) {
        showlog("DedeCMS数据库连接失败:" . $dede_db->connect_error);
        exit();
    } else {
        showlog("DedeCMS数据库连接成功");
    }
 
    if ( ! $dede_db->set_charset($cfg_db_language)) {
        showlog("DedeCMS数据库编码设置失败:" . $dede_db->error);
        exit();
    } else {
        showlog("DedeCMS数据库当前编码为:" . $dede_db->character_set_name());
    }
 
    if ( ! $dede_db->query('SELECT * FROM `' . $cfg_dbprefix . 'archives` LIMIT 1')) {
        showlog('DedeCMS数据库识别失败,检查表前缀参数是否正确。');
        exit();
    } else {
        showlog("DedeCMS数据库识别成功");
    }
 
    if ($cfg_db_language != 'utf8' || $dede_db->character_set_name() != 'utf8') {
        //需要转换字符编码
        if ( ! function_exists('iconv')) {
            showlog('PHP扩展库:iconv库未安装');
            exit();
        }
    }
 
    return true;
}
 
// 检查WordPress的数据是否正确,是否刚刚安装好,一切空白状态
function check_wp_config()
{
    global $wp_version;
    if ((float)$wp_version < 5.8) {
        showlog('WordPress系统版本小于5.8,程序退出');
        echo "\nWP最新版下载网址: https://cn.wordpress.org/download/\n\n";
        exit();
    } else {
        showlog('当前WordPress版本:' . $wp_version);
    }
 
 
    global $wpdb;
 
    $terms_count              = (int)$wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . 'terms');
    $termmeta_count           = (int)$wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . 'termmeta');
    $term_taxonomy_count      = (int)$wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . 'term_taxonomy');
    $term_relationships_count = (int)$wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . 'term_relationships');
    $posts_count              = (int)$wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->base_prefix . 'posts');
    if ($terms_count > 1 || $termmeta_count > 0 || $term_taxonomy_count > 1 || $term_relationships_count > 1 || $posts_count > 10) {
        showlog('WP已有数据,请使用全新安装的WordPress系统');
        echo "\nWP最新版下载网址: https://cn.wordpress.org/download/\n\n";
        exit();
    } else {
        showlog('确认当前是全新安装的WordPress系统,成功');
 
        //清除初始化安装时,自动创建的一丁点数据,保证绝对为空。否则无法保持 原文章ID值
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'terms');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'termmeta');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'term_taxonomy');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'term_relationships');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'posts');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'postmeta');
        $wpdb->query("TRUNCATE " . $wpdb->base_prefix . 'comments');
    }
}
 
 
// 迁移文章内容
// 从 DedeCMS 的 archives 和 addonarticle 两个表,将文章栏目信息迁移到 WP 的 posts表。
function migrate_article()
{
    global $dede_db, $cfg_dbprefix;
    global $wpdb;
 
    $result        = $dede_db->query('SELECT COUNT(*) FROM `' . $cfg_dbprefix . 'archives` ');
    $row           = $result->fetch_row();
    $article_count = (int)$row[0];
    showlog("总共有 " . $article_count . " 篇文章内容");
 
    $result = $dede_db->query('SELECT MAX(`id`) FROM `' . $cfg_dbprefix . 'archives` ');
    $row    = $result->fetch_row();
    $maxid  = (int)$row[0];
    showlog("最大文章ID为 " . $maxid);
 
 
    //从哪一个ID开始迁移~~,如果数据量太大,而之前已经迁移过一部分了,或者太旧的文章不想要迁移了,那么可以修改这个值,从指定的ID开始继续
    $lastid   = 0;
    $do_count = 0;
    $step     = 10; //每次从数据库取多少篇文章
 
    $default_author_id = 1;
 
    $timeformat = 'Y-m-d H:i:s';
 
    $gmt_timezone   = new DateTimeZone('UTC');
    $local_timezone = wp_timezone(); //new DateTimeZone('PRC');
 
    while ($do_count < $article_count && $lastid < $maxid) {
        $result = $dede_db->query("SELECT * FROM `" . $cfg_dbprefix . "archives` WHERE `id`> {$lastid} ORDER BY `id` LIMIT " . $step);
 
        while ($obj = $result->fetch_object()) {
            if ($do_count % 100 == 0) {
                echo $obj->id;
                //printf("%s (%s)\n", $obj->id, $obj->title);
            } elseif ($do_count % 10 == 0) {
                echo ".";
            }
 
            $id          = $obj->id;
            $lastid      = $id;
            $create_time = $obj->pubdate;  //时间戳int
            $update_time = $obj->senddate; //时间戳int
 
            //文章创建时间
            $date = new DateTime();
            $date->setTimezone($local_timezone);   //本地时间
            $date->setTimestamp($create_time);     //本地时间戳int
            $post_date = $date->format($timeformat);
            $date->setTimezone($gmt_timezone);     //修改为UTC时间
            $post_date_gmt = $date->format($timeformat);
 
            //文章修改时间
            $date = new DateTime();
            $date->setTimezone($local_timezone);
            $date->setTimestamp($update_time);
            $post_modified = $date->format($timeformat);
            $date->setTimezone($gmt_timezone);
            $post_modified_gmt = $date->format($timeformat);
 
            //文章是否允许评论
            $comment_status = $obj->notpost == 1 ? "closed" : "open";
 
 
            $content_result = $dede_db->query("SELECT `body` FROM `" . $cfg_dbprefix . "addonarticle` WHERE `aid`= {$id} LIMIT 1");
            $content_obj    = $content_result->fetch_object();
            $post_content   = tt($content_obj->body);  //文章正文内容
            $content_result->close();
 
            $post_title = tt($obj->title); //标题
            $post_name  = strtolower(urlencode($post_title));  //标题转换为URL ENCODE的结果
 
            $guid = "";  //文章URL
 
            $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                . "posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, 
                `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, 
                `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`,
                `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`)
                VALUES (%d, %d, %s, %s,  %s, %s, 
                '', 'publish', %s, 'closed', '', %s, 
                '', '', %s, %s, '', '', 
                %s, 0, 'post', '', 0)",
                array(
                    $id,
                    $default_author_id,
                    $post_date,
                    $post_date_gmt,
                    $post_content,
                    $post_title,
                    $comment_status,
                    $post_name,
                    $post_modified,
                    $post_modified_gmt,
                    $guid
                ));
            $wpdb->query($sql);
 
            //设置各种附加属性到 postmeta 表
 
            if ($obj->shorttitle) { //shorttitle 文章副标题, 简略标题
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "shorttitle", tt($obj->shorttitle)));
                $wpdb->query($sql);
            }
 
            if ($obj->color) { //color 标题颜色
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "color", tt($obj->color)));
                $wpdb->query($sql);
            }
 
            if ($obj->writer && $obj->writer != 'admin' && $obj->writer != 'dede') { //writer 文章作者
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "writer", tt($obj->writer)));
                $wpdb->query($sql);
            }
 
            if ($obj->source && $obj->source != '未知') { //source 文章来源
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "source", tt($obj->source)));
                $wpdb->query($sql);
            }
 
            if ($obj->litpic) { //litpic  文章缩略图
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "litpic", tt($obj->litpic)));
                $wpdb->query($sql);
            }
 
            if ($obj->keywords) { //keywords 关键字 , 一般用于SEO的HTML文件头部分
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "keywords", tt($obj->keywords)));
                $wpdb->query($sql);
            }
 
            if ($obj->description) { //description 文章摘要
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "description", tt($obj->description)));
                $wpdb->query($sql);
            }
            if ($obj->click) { //click  浏览次数
                $sql = $wpdb->prepare("INSERT INTO `" . $wpdb->base_prefix
                    . "postmeta` (`post_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                    array($id, "click", $obj->click));
                $wpdb->query($sql);
            }
 
            $do_count++;
        }
 
        $result->close();
    }
 
    echo "\n";
    showlog("文章内容迁移完成");
}
 
// 字符编码转换(如果需要的话)
function tt($str)
{
    global $cfg_db_language;
    if ($cfg_db_language == 'utf8') {
        return $str;
    } else {
        return iconv($cfg_db_language, 'UTF-8//IGNORE', $str); //将字符串的编码从GBK转到UTF-8
    }
}
 
// 计算程序运行耗时
function calc_elapse_time($start_time)
{
    $segs = microtime(true) - $start_time;
 
    $hours     = floor($segs / (60 * 60));
    $segs      -= $hours * 60 * 60;
    $mins      = floor($segs / 60);
    $segs      -= $mins * 60;
    $microsegs = floor(($segs - floor($segs)) * 1000);
    $segs      = floor($segs);
 
    return (empty($hours) ? "" : $hours . "小时") .
        (empty($mins) ? "" : $mins . "分钟") .
        $segs . "秒" .
        $microsegs . "毫秒";
}
 
//确认环境正确
check_dede_config();
check_wp_config();
 
//开始执行迁移操作
$start_time = microtime(true);
migrate_article();  // 迁移文章内容
 
echo "\n迁移完成,总共耗时 " . calc_elapse_time($start_time) . "\n\n";

3、运行转换程序脚本

php dedecms_to_wordpress.php

转换之后,看一下伪静态链接是否一样。

wordpress利用mysql让文章 ID重新排列

wordpress如何在搜索结果中排除指定分类的文章

wordpress如何设置自动发布文章功能

wordpress如何用代码自动清空回收站

新站需要保持多少个外链(有什么要求)

标签: wordpress, 新站

上面是“织梦cms数据转换wordpress流程介绍”的全面内容,想了解更多关于 织梦cms 内容,请继续关注web建站教程。

当前网址:https://ipkd.cn/webs_2075.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

当前位置: 网站首页 > 织梦cms
本文共计9957个字,预计阅读时长67分钟
生活小工具,收录了80多款小工具
上一篇: 程序员正能量文案:乐观积极的治愈系文案,朋友圈满满向上动力句子
下一篇: Lunar组件如何利用I18n实现多语言功能
x 打工人ai神器