我正在尝试修改一个脚本,该脚本被开发为将文章记录从Joomla(1.5.x)数据库导入到Wordpress 3.2.1表中以进行张贴。 它是一个将内容从Joomla迁移到Wordpress的脚本。

我遇到的脚本问题是它没有维护唯一的标识符(在Joomla中为“ id”,在Wordpress中为“ ID”)。 根据我的理解,这使得将所有Joomla永久链接重定向到新的(而且显然是不同的)Wordpress永久链接的处理变得更加复杂(更多工作)。 如果WP中的ID与Joomla中的ID相同,则htaccess中的一些基本重写规则将足以执行重定向。

因此,我想看看是否可以修改代码以强制使用ID,而不是在将记录插入表中时以连续顺序生成该ID。

我正在修改的脚本可在以下位置找到: http ://wordpress.org/extend/plugins/joomla-to-wordpress-migrator/有问题的文件称为:joomla2wp-mig.php

该数组是在第1049和1081行附近创建的。在第1049行,它是:

 $wp_posts[] = array(
        'ID' => $R->id,  //I ADDED THIS IN
        'post_author' => $user_id,
        'post_category' => array($wp_cat_id),
        'post_content' => $post_content, 
        'post_date' => $R->created,
        'post_date_gmt' => $R->created,
        'post_modified' => $R->modified,
        'post_modified_gmt' => $R->modified,
        'post_title' => $R->title,
        'post_status' => 'publish',
        'comment_status' => 'open',
        'ping_status' => 'open',
        'post_name' => $R->alias,
        'tags_input' => $R->metakey, 
        'post_type' => 'post'
      );

在1081行是:

 $array = array(
 "ID"        => $item['ID'],    //I ADDED THIS IN
 "post_author"       => $user_id,
 "post_parent"       => intval($wp_cat_id),
 "post_content"      => $item['post_content'],
 "post_date"         => $item['post_date'],
 "post_date_gmt"     => $item['post_date_gmt'],
 "post_modified"     => $item['post_modified'],
 "post_modified_gmt" => $item['post_modified_gmt'],
 "post_title"        => $item['post_title'],
 "post_status"       => $item['post_status'],
 "comment_status"    => $item['comment_status'],
 "ping_status"       => $item['ping_status'],
 "post_name"         => $item['post_name'],
 "post_type"         => $item['post_type']
      );

我已经注释了ID行,该行已添加到数组代码的每个位的顶部。

INSERT命令被隐含在第1097行附近

INSERT命令像这样放在一起:

$insert_sql = "INSERT INTO " . $j2wp_wp_tb_prefix . "posts" . " set ";

$inserted = 0;
foreach ($array as $k => $v) 
{
  if($k AND $v) 
  {
    if($inserted > 0) 
      $insert_sql .= ",";
    $insert_sql .= " ".$k." = '".mysql_escape_string(str_replace("`","",$v))."'";
    ++$inserted;
  }
}    
$sql_query[] = $insert_sql;

}

它使用MYSQL函数INSERT INTO ... SET (与INSERT INTO ... VALUE相对)

我面临的挑战是:数组不包含ID,因此我在其中添加了ID。

进行此更改后,当我运行脚本时,它将显示出来(在Wordpress UI端),可以正常运行,但是即使它说成功了,也不会插入任何记录。

我发现我可以通过用X个空白记录设置一个新的wp_posts表来解决该问题。 假设我要导入100篇文章,然后将100条记录放入表中,并且它们的ID将为1到100。当我运行修改后的代码时,它将很高兴地更新并填充这些现有记录。 我不明白的是为什么当我将唯一标识符(ID)强制设置为所需的名称时,为什么它不会创建新记录。

我想知道是否需要使用INSERT INTO ... VALUE命令而不是INSERT INTO ... SET

我打算对此进行测试,但老实说,我不是程序员,而是随其发展而来。 因此,我不知道如何重写PHP以隐含VALUE命令所需的结构来代替SET

任何帮助或建议,将不胜感激。

我想我必须重写上面提供的最后一部分代码。

wordpress支持论坛上对此问题进行一些讨论。 一位用户(spiff06)非常乐意帮助我解决问题。 我们一直忙于获取代码以使用强制标识符插入新记录,然后我使用了我们所谓的“ messy”选项(这是我上面提到的方法...设置所需数量的表)空白记录)。

即使我已经在自己的网站上使用了这种“混乱”方法,但我仍希望使该过程对于Joomla 1.5.x上的其他用户而言是干净的,他们正在切换到WP,而不是升级到较新的Joomla版本(这是一个很大的过程,有很多人像我一样只是在跳WP)。

非常感谢...

乔纳森

===============>>#1 票数:0

您可以尝试以下方法:

  1. 更改导入的mysql表(post @ wordpress)的结构。 更改id字段,使其不再是自动递增字段。 让它只是一个整数字段。

  2. 导入值。 这样,您就可以将任何值毫无限制地输入字段ID。

  3. 再次更改导入后,表的结构将ID字段再次设置为自动增量字段。

===============>>#2 票数:0 已采纳

我从来没有发现这样做的真正自动化/脚本化方式。 我最终做了一个解决方法:

现在,我已经通过预填充表格以“混乱”的方式导入了所有帖子。

变通方法用所需数量的记录预填充WP数据库中的wp_posts表(在Joomla中查看以查看有多少记录)。 我有398条记录,因此我在wp_posts中添加了398条记录。

怎么样? 我通过将emtpy wp_posts表导出到.csv文件来完成此操作。 然后,我在Excel中打开了它(Numbers或OpenOffice也可以)。 在电子表格应用程序中,很容易在ID列中自动填充1至398。

然后,我将该.csv文件重新导入到wp_posts中。 这给了我一个wp_posts,其中有398条记录行,其中ID字段为1到398。

然后,我将Mambo / Joomla的1.5.4版本运行到WordPress迁移器,可以从WordPress中安装。

最终结果?

所有帖子都具有与原始Joomla文章相同的ID。

  ask by inspirednz translate from so

未解决问题?本站智能推荐:

1回复

Dreamweaver PHP mySQL插入到WordPress wpdb转换

我想知道如何将Dreamweaver生成的代码转换为WordPress中用于mySQL表单的代码。 如果我在空白页上使用代码(仅表单和SQL),则可以正常工作。 当我将其发布到模板中时,它不是。 我认为我在wordPress内部使用了错误的方法。 我已经阅读并阅读了wpdb页面,但是缺少
1回复

MySql在Wordpress网站中不起作用

我整天都在尝试此事...我创建了一个完美的sqk脚本(它直接在PHP Admin上运行),当我尝试使用所有可能的方式(wpdb-> query,mysql_db_query,wpdb-> insert)插入它时)它只是不会做.. 这是我的脚本,请帮忙,我真的很绝望! :(
1回复

WordPress:使用get_current_user_id()插入到我的WPDB表中

因此,我希望我的插件将当前用户的ID插入到我的表“ wp_ml_char”中。 问题是,它实际上无法插入。 没有任何反应,也不会显示任何错误。 此表单仅要求我输入一个名称,但是它也具有“隐藏”输入类型,该类型可以捕获当前存在的任何用户ID。 我无法查明原因到底在哪里,但这可能是我所做的“
1回复

将查询结果插入同一表

(对于WordPress人士:通过合并成对的现有“自定义字段”,我正在创建一组称为“ sidebar_buy_now”的新“自定义字段”。) 我有一张桌子: wp_postmeta有4个字段: meta_id , post_id , meta_key , meta_value 。 m
1回复

试图让简单的WordPress自定义页面PHP插入工作

我已经创建了一个自定义的wordpress页面,并且试图创建一个简单的表单并将数据插入数据库。 我有两个问题。 1.我的代码是否插入到自定义页面的正确位置? 2.这个例子(在这个论坛上找到)给我一个http 500错误。 我已经尝试解决很多天了。 请有人帮忙:)
11回复

将与MYSQL连接的动态PHP网站转换为CMS的简单方法?

(我不知道这是最好的措词,但是就到这里!)我有一个PHP网站,它根据标识符输入(例如.php?id = 500)从表中获取某些数据,并从每个表中查找抓取各个字段并将其放入表格或列表中。 我将使用的最佳简易CMS是什么? 我将如何处理? 是否有用于Joomla或Wordpress之类的简
4回复

在joomla组件中添加新的Js,css文件

我想将.js文件和css文件插入到我的joomla组件中,并在.php文件中调用所有这些文件。有人知道这是什么程序。 谢谢
2回复

PHP MySQL麻烦将数据添加到表

我是php的新手,我一直在尝试向mysql数据库中插入一系列变量。 但是,似乎在创建表时并未将数据输入到表中。 我希望有人能告诉我原因。 任何帮助将非常感激。 php代码:
1回复

如何在php中将所有seo pack标签添加到帖子中?

我正在使用“ sitename.com/folder/file.php”之类的php文件每天自动在wordpress中发布信息。 代码就是这样。 我想为此帖子添加SEO标题,SEO描述和SEO关键字,并且我正在使用SEO的AIOSP插件。 应该添加什么代码来填充这些区域?
2回复

mySQL:当meta_key不存在时将其插入表中

好的我正在寻找针对Wordpress数据库在mySQL中运行循环查询。 某些记录具有[城市名称]的自定义字段(例如:meta_key ='sidebar'和meta_value ='chicago')。 问题是有些人有这个自定义字段而其他人没有。 我已经隔离了不通过以下查询的记录: