DISCUZ文章转wordpress程序案例

2018年03月05日 14:25:21156次阅读

今天有个客户要求把DISCUZ文章转为wordpress.

最开始想着采集。采集了N个小时发现效率太低,而且内容过滤不好处理。。

简单的界面

算了。还是用数据库转换吧。代码如下:

执行文件代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Discuz转WordPress处理程序</title>
<link rel="stylesheet" href="ws/bootstrap.min.css">
<script src="/ws/jquery.min.js"></script>
</head>
<body>
   <div class="container" style="margin-top:9%;">
        <div class="panel panel-success">
        <div class="panel-heading"><h1>Discuz转WordPress处理程序</h1></div>
        </div>
          <p><h3>处理状态</h3></p>
          <div class="re"></div>
            <br/>
            <br/>
            <br/>
            <?php
                include('wp-load.php');
                var_dump($_GET['tid']);
                if($_GET['tid']){
                    update_option('ws_id',$_GET['tid']);
                     echo '已经重置为'.get_option('ws_id'). '篇文章开始</br>';
                }else{
                     echo '现在开始处理第' .get_option('ws_id'). '篇文章开始</br>';
                }
            ?>
            <input type="hidden" id="k" value="0"/>
            <a href="javascript:" onclick="start()">开始</a>
            <a href="javascript:" onclick="end()">停止</a>
        </div>
   </div>
<script>
    function end(){
        $("#k").val(0);
    }
    function start(){
        $("#k").val(1);
        ws();
    }
    function ws() {
        var k = $("#k").val();
        if (k != 0) {
            $.ajax({
                url: '/ws.php',
                type: 'POST', //GET
                success: function (data) {
                    $(".re").html(data);
                    ws();
                }
            })
        }
    }
</script>
</body>
</html>

负责处理的PHP文件如下:

<?php
    include('wp-load.php');
    $ws_id = get_option('ws_id');//设置一个开关,中断了可以继续,不用重头开
    if (empty($ws_id)) {
        update_option('ws_id', 0);
    }
    echo '现在开始处理第' . $ws_id . '篇文章</br>';

    $mysqli = new mysqli("数据地址", "数据库用户名", "数据库密码", "数据库名");
    if (!$mysqli) {
        echo "链接失败<br/>";
    } else {
        echo "链接成功<br/>";
        $mysqli->query('set names uft-8;');
        $sql = "SELECT title,aid,catid,pic FROM pre_portal_article_title limit " . $ws_id . ',1';
        $result = $mysqli->query($sql);
        //var_dump($result);
        while ($tmp = mysqli_fetch_assoc($result)) {
            //查询到基本信息
            //var_dump($tmp);
            $a = $tmp;
            switch ($a['catid']) { //匹配两边的分类
                case 29:
                    $a['category'] = 80; //地产
                    break;
                case 30:
                    $a['category'] = 81;//时尚
                    break;
                case 28:
                    $a['category'] = 82; //文娱
                    break;
                case 27:
                    $a['category'] = 83; //消费
                    break;
                case 2:
                    $a['category'] = 85;//案例
                    break;
                case 3:
                    $a['category'] = 86;//观察
                    break;
                case 4:
                    $a['category'] = 87; //资讯
                    break;
                case 11:
                    $a['category'] = 89; //智能
                    break;
                case 12:
                    $a['category'] = 90;//测评
                    break;
                case 13:
                    $a['category'] = 91; //新金融
                    break;
                case 24:
                    $a['category'] = 92; //商学院
                    break;
                case 5:
                    $a['category'] = 93; //狮吼TV
                    break;
                default:
                    $a['category'] = 1; //狮吼TV
            }
            $sql_1 = "SELECT viewnum FROM pre_portal_article_count WHERE aid = " . $tmp['aid'];
            $result_1 = $mysqli->query($sql_1);
            while ($tmp_1 = mysqli_fetch_assoc($result_1)) {
                $a['viewnum'] = $tmp_1['viewnum']; //获取文章浏览量
            }
            $sql_2 = "SELECT dateline,content FROM pre_portal_article_content WHERE aid = " . $tmp['aid'];
            $result_2 = $mysqli->query($sql_2);
            while ($tmp_2 = mysqli_fetch_assoc($result_2)) {
                $a['dateline'] = $tmp_2['dateline'];
                $ass = str_replace('data/attachment','',$tmp_2['content']);
                $a['content'] = str_replace('http://www.shizihome.com/','',$ass);
            }

        }
        //var_dump($a);
        //开始写入文章
        echo $a['title'] . '<br/>';
        global $wpdb;
        $wresults = $wpdb->get_results("SELECT post_title FROM wp_posts WHERE post_title = '{$a['title']}'", ARRAY_A);
        //var_dump($wresults);
        if (!$wresults) {
            $post = array(
                'comment_status' => 'open', // 评论的状态,'closed'关闭评论.
                'post_author' => 1, //作者编号
                'post_category' => array($a['category']),//文章归类数组
                'post_content' => $a['content'], //文章内容,必填
                'post_date' => date("Y-m-d H:i:s", $a['dateline']), //文章编辑日期
                'post_date_gmt' => date("Y-m-d H:i:s", $a['dateline']), //文章编辑GMT日期
                'post_status' => 'publish', //新文章的状态
                'post_title' => $a['title'], //文章标题,必填
                'post_type' => 'post'//文章类型:文章、页面、链接、菜单、其他定制类型
            );
            $re = wp_insert_post($post);
            if ($re) {
                update_post_meta($re, 'views', $a['viewnum']);
                update_post_meta($re, 'ws_img', $a['pic']);
                echo '文章处理成功,新文章ID是:' . $re . '<br/>';
            } else {
                echo '文章处理失败<br/>';
            }
        } else {
            echo '文章已经存在<br/>';
        }
        update_option('ws_id', $ws_id + 1);
    }
    $mysqli->close();
?>

以上就是代码。如果你需要处理各种MSQL数据转换问题可以联系我。

发表评论
发布评论时请遵守国家相关法律法规!
  1. #24qingtian 发表于
    这是一个简单版的。如果要做成插件至少要记录处理失败的问题。以便再次处理。 而且这个处理不包括媒体文件。 媒体文件需要另外处理。
  2. #28营销软件 发表于
    新年虽已过,好运不打折!
  3. #32三五创业网 发表于
    找了好久才找到这里,来了就不想走!
站内通知
博客新改版,内容正在建设中,如果有产品需求请联系:248758228@qq.com
主题商店

WordPress自学网|Mr.Long博客会员登录