WordPress转修罗XiunoBBS4.0程序的工具教程

  • A+
所属分类:未分类

WordPress转修罗XiunoBBS4.0程序的工具教程

这里我给大家分享一下wp转xiuno程序教程。包含用户表(做了一些原来QQ用户登录插件的过滤),文章表,回复表,基本上主要的内容全部转过来了。包含代码高亮也转成了xiunobbs的高亮格式。

本工具的特点在于,文章的ID和原来WP的ID是一样的,不会变化。比如原来文章www.zidiu.com/123.html变成www.zidiu/thread-123.htm,只用在转发规则到下手脚,就直接跳转新的地址上来,很好的301跳转,不会影响百度蜘蛛收录而吃闭门羹。

用前须知

转换前,请在本机环境测试和做好备份,可能你还需要自己做一些小的改动。能看懂PHP的先过一下代码,啥都不懂的,需谨慎(原wp数据不会受到任何影响,新站文章表会被清空)。

  1. <?php
  2. header("Content-Type: text/html; charset=UTF-8");
  3. // 本程序用来升级 wordpress 到 XiunoBlog
  4. if(empty($_GET['next'])) {
  5. echo '
  6.     <p style="color:red;">本程序仅对XIUNO BBS4.0有效,从worpdress将用户,文章,栏目转移到BBS中!</p>
  7.     <p style="color:red;">升级有风险,请谨慎升级!</p>
  8.     <p style="color:red;">v1.0.2</p>
  9.     <p style="color:#1d953f;"><a href="./wp2bbs.php?next=1">我有备份,我要升级!</a></p>
  10. ';
  11. } else {
  12.      
  13.     @set_time_limit(0);
  14.      
  15.     define('DEBUG', 0);
  16.      
  17.     define('BBS_PATH', './');
  18.      
  19.     // 加载应用的配置文件,唯一的全局变量 $conf
  20.     if(!($conf = include BBS_PATH.'conf/conf.php')) {
  21.         message('配置文件不存在,请先安装 Xiuno BBS。');
  22.     }
  23.     define('FRAMEWORK_PATH', BBS_PATH.'core/');
  24.     define('FRAMEWORK_TMP_PATH', $conf['tmp_path']);
  25.     define('FRAMEWORK_LOG_PATH', $conf['log_path']);
  26.     include 'db/db.func.php';
  27.     include 'db/db_pdo_mysql.class.php';
  28.      
  29.     // xn2 db instance
  30.     function get_db() {
  31.         if(isset($_SERVER['db']))
  32.             return $_SERVER['db'];
  33.         $conf = include BBS_PATH.'conf/conf.php';
  34.         $db = new db_pdo_mysql($conf['db'][$conf['db']['type']]);
  35.         $_SERVER['db'] = $db;
  36.         return $db;
  37.     }
  38.      
  39.     // wp db instance    wp配置文件
  40.     function get_db_wp($pwd) {
  41.         global $wp;
  42.         if(!empty($wp))return;
  43.         $wp = new db_pdo_mysql(array(
  44.             'master' => array (
  45.                 'host' => '127.0.0.1',
  46.                 'user' => 'root',
  47.                 'password' => $pwd,//你的数据库密码
  48.                 'name' => 'wordpress',
  49.                 'charset' => 'utf8',   // 要求取出 utf-8 数据 mysql 4.1 以后支持转码
  50.                 //'charset' => $_config['db'][1]['dbcharset'],
  51.                 'tablepre' => 'wp_',
  52.                 'engine'=>'MyISAM',
  53.             ),
  54.             'slaves' => array ()
  55.         ));
  56.     }
  57.      
  58.      
  59.     // 升级完后 跳转
  60.     function next_step() {
  61.         echo "<p>升级完成,<a href='../../'>查看</a></p>";
  62.     }
  63.      
  64.     function debug_info($str){
  65.         echo "$str<br/>";
  66.     }
  67.      
  68.     function array_to_object($arr) {
  69.         if (gettype($arr) != 'array') {
  70.             return $arr;//返回自己
  71.         }
  72.         foreach ($arr as $k => $v) {
  73.             if (gettype($v) == 'array' || getType($v) == 'object') {
  74.                 $arr[$k] = (object)array_to_object($v);
  75.             }
  76.         }
  77.         return (object)$arr;
  78.     }
  79.      
  80.     function wp_query($sql){
  81.         global $wp;
  82.         $db = $wp;
  83.         $rs = $db->query($sql);
  84.         $result = array();
  85.         foreach($rs as $val){
  86.             $val = array_to_object($val);
  87.             array_push($result,$val);
  88.         }
  89.         if(count($result)>0)
  90.             return (object)$result;//
  91.         return false;
  92.     }
  93.      
  94.     // 同步用户
  95.     function upgrade_user() {
  96.         $cache = array();
  97.         // wp 用户 过滤open social插件生成的QQ,CSDN,SINA用户
  98.         $users = wp_query('SELECT * FROM wp_users WHERE user_email NOT LIKE "SINA%" AND user_email NOT LIKE "CSDN%" AND user_email NOT LIKE "QQ%" AND user_login NOT LIKE "%@%"');
  99.         if(!$users)return;
  100.         foreach($users as $key => $val) {
  101.             //ca66a9ea70de87e76385ac7bfa240bf2 明文密码为123456
  102.             if(in_array($val->user_email,$cache)) continue;
  103.             db_insert('user',array('username'=>$val->user_login,'gid'=>0,'password'=>'ca66a9ea70de87e76385ac7bfa240bf2',
  104.                 'salt'=>'qqxre5sgve9n7n99','create_date'=>strtotime($val->user_registered),'email'=>$val->user_email));
  105.             array_push($cache,$val->user_email);
  106.         }
  107.     }
  108.     /*
  109.     #SELECT * FROM wp_terms WHERE term_id IN(SELECT term_id FROM wp_term_taxonomy WHERE taxonomy="category");
  110.     #查询相对分类下面的文章
  111.     #SELECT object_id,term_taxonomy_id FROM wp_term_relationships WHERE object_id IN(SELECT ID FROM wp_posts WHERE post_status="publish" AND post_type="post");
  112.     */
  113.     // 板块    分类作为板块    todo:标签做为主题分类 20条
  114.     function upgrade_forum() {
  115.         global $wp;
  116.         //查询所有的分类ID语句
  117.         $cache = array();//存放已经写入的分类
  118.         //插入对应的分类及分类ID
  119.         $posts = wp_query('SELECT * FROM wp_posts WHERE post_status="publish" AND post_type="post"');
  120.         foreach($posts as $key=>$val){
  121.             //查询所属的分类
  122.             $ships = wp_query('SELECT * FROM wp_term_relationships WHERE object_id='.$val->ID);
  123.             foreach($ships as $skey=>$sval){
  124.                 //查询分类标签
  125.                 $taxonomy = wp_query('SELECT * FROM wp_term_taxonomy WHERE parent!=0 AND term_taxonomy_id='.$sval->term_taxonomy_id);
  126.                 if(!$taxonomy)continue;//理论只会有一个对应的分类ID
  127.                 foreach($taxonomy as $tkey=>$tval){
  128.                     if(in_array($tval->term_id,$cache)) continue;
  129.                     $category = (array)wp_query('SELECT * FROM wp_terms WHERE term_id='.$tval->term_id);
  130.                     if($tval->taxonomy == 'category'){
  131.                         $category = array_pop($category);
  132.                         db_insert('forum',array('fid'=>$category->term_id,'name'=>$category->name,'brief'=>$category->name.'介绍'));;
  133.                         array_push($cache,$category->term_id);
  134.                     }
  135.                 }
  136.             }
  137.         }
  138.     }
  139.      
  140.     // 文章导入
  141.     function upgrade_thread() {
  142.         //$sql = 'SELECT * FROM wp_term_relationships WHERE object_id IN(SELECT ID FROM wp_posts WHERE post_status="publish" AND post_type="post") AND term_taxonomy_id IN(SELECT term_id FROM wp_terms WHERE term_id IN(SELECT term_id FROM wp_term_taxonomy WHERE taxonomy="category"))';
  143.         global $wp;
  144.         //查询文章列表
  145.         $posts = wp_query('SELECT * FROM wp_posts WHERE post_status="publish" AND post_type="post"');
  146.         foreach($posts as $key=>$val){
  147.             //查询所属的分类
  148.             $ships = wp_query('SELECT * FROM wp_term_relationships WHERE object_id='.$val->ID);
  149.             foreach($ships as $skey=>$sval){
  150.                 $fid = 1015;//默认放到网络文摘
  151.                 $post_views_count = rand(100,200);
  152.                 //查询分类标签
  153.                 $taxonomy = wp_query('SELECT * FROM wp_term_taxonomy WHERE parent!=0 AND term_taxonomy_id='.$sval->term_taxonomy_id);
  154.                 if($taxonomy){
  155.                     $taxonomy = (array)$taxonomy;
  156.                     $taxonomy = (object)$taxonomy[0];
  157.                     if($taxonomy->taxonomy == 'category'){
  158.                         $post_views_count = wp_query("SELECT meta_value FROM wp_postmeta WHERE post_id=$val->ID AND meta_key='post_views_count' LIMIT 1;");
  159.                         if($post_views_count){
  160.                             $views = (array)$post_views_count;
  161.                             $nCount = $views[0]->meta_value;
  162.                             if($nCount>$taxonomy->count)
  163.                                 $post_views_count = $nCount;
  164.                             else
  165.                                 $post_views_count = $taxonomy->count;
  166.                         }else{
  167.                             $post_views_count = $taxonomy->count;
  168.                         }
  169.                         $fid = $taxonomy->term_id;
  170.                     }
  171.                 }
  172.                 $thread = array(
  173.                                 'fid'=>$fid,
  174.                                 'tid'=>$val->ID,
  175.                                 'uid'=>1,//admin用户的ID
  176.                                 'subject'=>$val->post_title,
  177.                                 'create_date'=>strtotime($val->post_date),
  178.                                 'last_date'=>strtotime($val->post_date),
  179.                                 'views'=>$post_views_count,'posts'=>0,'top'=>0,
  180.                                 'firstpid'=>$val->ID,
  181.                                 'lastuid'=>1,
  182.                                 'lastpid'=>$val->ID,
  183.                                 'userip'=>2130706433,
  184.                             );
  185.                 db_insert('thread',$thread);
  186.                 $post = array (
  187.                                 //'pid'=>$pid,
  188.                                 'tid'=>$val->ID,
  189.                                 'isfirst'=>1,
  190.                                 'uid'=>1,//admin用户的ID
  191.                                 'create_date'=>strtotime($val->post_date),
  192.                                 'userip'=>2130706433,
  193.                                 'message'=>'',
  194.                                 'message_fmt'=>''
  195.                             );
  196.                 //代码高亮部分的\r\n\r\n去掉
  197.                 $temp = replaceEnter($val->post_content,'cpp');
  198.                 $temp = replaceEnter($temp,'java');
  199.                 $temp = replaceEnter($temp,'php');
  200.                 $temp = replaceEnter($temp,'objc');
  201.                 $temp = replaceEnter($temp,'html');
  202.                 $temp = replaceEnter($temp,'xml');
  203.                 $temp = replaceEnter($temp,'js');
  204.                 $temp = auto_img_add_p($temp);
  205.                 $temp = str_replace("wp-content/uploads","upload/wp",$temp);//图片,附件
  206.                 $post['message'] = $temp;
  207.                 $post['message_fmt'] = $temp;
  208.                 $pid = db_insert('post',$post);//插入的ID
  209.                 db_insert('mythread',array('uid'=>1,'tid'=>$val->ID));
  210.                 db_exec("UPDATE bbs_forum SET threads=threads+1 WHERE fid=$fid LIMIT 1;");
  211.                 db_exec("UPDATE bbs_thread SET firstpid=$pid,lastpid=$pid WHERE tid=$val->ID LIMIT 1;");
  212.                 db_exec("UPDATE bbs_user SET threads=threads+1 WHERE uid=1 LIMIT 1;");
  213.                 break;
  214.             }
  215.         }
  216.     }
  217.      
  218.     function upgrade_comments() {
  219.         global $wp;
  220.         //查询文章列表
  221.         $comments = wp_query('SELECT * FROM wp_comments');
  222.         $users = db_sql_find('SELECT * FROM bbs_user');
  223.         $nMax = count($users)-1;
  224.         $nMin = 2;
  225.         foreach($comments as $key=>$val){
  226.             $temp = replaceEnter($val->comment_content,'cpp');
  227.             $temp = replaceEnter($temp,'java');
  228.             $temp = replaceEnter($temp,'php');
  229.             $temp = replaceEnter($temp,'objc');
  230.             $temp = replaceEnter($temp,'html');
  231.             $temp = replaceEnter($temp,'xml');
  232.             $temp = replaceEnter($temp,'js');
  233.             $temp = auto_img_add_p($temp);
  234.             $post = array (
  235.                 'tid'=>$val->comment_post_ID,
  236.                 'uid'=>$users[rand($nMin,$nMax)]['uid'],//admin用户的ID
  237.                 'create_date'=>strtotime($val->comment_date),
  238.                 'userip'=>2130706433,
  239.                 'message'=>$temp,
  240.                 'message_fmt'=>$temp
  241.             );
  242.             db_insert('post',$post);
  243.             db_exec("UPDATE bbs_thread SET posts=posts+1 WHERE tid=$val->comment_post_ID LIMIT 1;");
  244.         }
  245.     }
  246.      
  247.     //所有的图片都自动加上<p>段落功能
  248.     function auto_img_add_p($content){
  249.         $pregRule = "/<[img|IMG].*?src=[\'|"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|"].*?[\/]?>/";
  250.         preg_match_all($pregRule, $content,$arr);
  251.         for($i=0,$j=count($arr[0]);$i<$j;$i++){
  252.             $content = str_replace($arr[0][$i],'<p>'.$arr[0][$i].'</p>',$content);
  253.         }
  254.         return $content;  
  255.     }
  256.      
  257.     function replaceEnter($src,$tag){
  258.         preg_match_all("/\[$tag\]([\s\S]*?)\[\/$tag\]/",$src,$mat);
  259.         for($i=0,$j=count($mat[0]);$i<$j;$i++){
  260.             $code = $mat[0][$i];//匹配的标签内容
  261.             $code = str_replace("\r\n\r\n","\n",$code);
  262.             $code = str_replace("\r\n","\n",$code);
  263.             $code = str_replace("<br/>","\n",$code);//html转成\n
  264.             //代码高亮标签
  265.             $code = str_replace("[/$tag]",'</pre>',$code);
  266.             $code = str_replace("[$tag]",'<pre class="brush:cpp;toolbar:false">',$code);
  267.             $src = str_replace($mat[0][$i],$code,$src);
  268.         }
  269.         $src = str_replace("\r\n\r\n","<br/>",$src);
  270.         //$src = str_replace("\r\n","<br/>",$src);
  271.         return $src;
  272.     }
  273.      
  274.     function truncate_data(){
  275.         db_exec('TRUNCATE bbs_forum');
  276.         db_exec('TRUNCATE bbs_mythread');
  277.         db_exec('TRUNCATE bbs_post');
  278.         db_exec('TRUNCATE bbs_thread');
  279.         debug_info('bbs_forum,bbs_mythread,bbs_post,bbs_thread数据清空完成');
  280.     }
  281.     if(!isset($_GET['pwd'])){
  282.         echo '没有密码';
  283.         return;
  284.     }
  285.     get_db_wp($_GET['pwd']);//初始化连接WORDPRESS数据库
  286.     get_db();//初始化数据库连接
  287.     truncate_data();//如果已经有数据,这项可以注释
  288.     upgrade_user();//没啥鸟用,直接用QQ插件登录
  289.     upgrade_forum();
  290.     upgrade_thread();
  291.     upgrade_comments();//只能放最后,因为留言是放在文章表中ID必须要独占一个ID
  292.     next_step();
  293. }
  294. ?>

复制代码

下面是db.php其它几个文件bbs自带的有,这里就不贴出来了。

上传到网站根目录,然后http://127.0.0.1/wp2bbs.php?next=1&pwd=你的数据库密码。
再补充一点,WP的文章分类,我把父节点没转过来。因为我不需要。如果有需要的朋友,可以把sql语句改一下。'SELECT  *  FROM  wp_term_taxonomy  WHERE  parent!=0  AND    这里面的prent!=0去掉就行了。
最后后台更新缓存,大功告成!

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin