3

好吧,事情就是这样,我有这个网站,它曾经是wordpress,但已经转换成70 多个静态页面,管理员被删除,整个网站都是静态的(这意味着每个页面都在 index.html 中),我想创建一个制作 xml 的脚本,这样我只需将它导入到新的 wordpress 安装中。

到目前为止,我能够创建一个 XML,但它只导入一篇文章

数据源是页面的 URL,我使用 jquery $get 进行过滤,仅收集给定存档的帖子。

//html
<input type="text" class="full_path">
<input type="button" value="Get Data" class="getdata">

//script

$('.getdata').click(function(){
            $.get($('.full_path').val(), function(data) {
              post = $(data).find('div [style*="width:530px;"]');
              $('.result').html(post.html());

            });
        });//get Data

通过 AJAX,我将清理后的数据发送到下面创建 XML 的 php 中:

$file = 'newpost.xml';
$post_data = $_REQUEST['post_data'];
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new post to the file
$catStr = '';
if(isset($post_data['categories']) && count($post_data['categories']) > 0){
    foreach($post_data['categories'] as $category) {
        $catStr .= '<category domain="category" nicename="'.$category.'"><![CDATA['.$category.']]></category>';
    }   
}
$tagStr = '';
if(isset($post_data['tags']) && count($post_data['tags']) > 0){
    //populate post_tag like the above
}
$post_name = str_replace(' ','-',$post_data["title"]);
$post_name = str_replace(array('"','/',':','.',',','[',']','“','”'),'',strtolower($post_name));

$post_date = '2011-4-0'.rand(1, 29).''.rand(1, 12).':'.rand(1, 59).':'.rand(1, 59);
$pubTime = rand(1, 12).':'.rand(1, 59).':'.rand(1, 59).' +0000';

$post = '
    <item>
        <title>'.$post_data["title"].'</title>
        <link>'.$post_data["link"].'</link>
        <pubDate>'.$post_data["date"].' '.$pubTime.'</pubDate>
        <dc:creator>admin</dc:creator>
        <guid isPermaLink="false">http://localhost/saunders/?p=1</guid>
        <description></description>
        <content:encoded><![CDATA['.$post_data["content"].']]></content:encoded>
        <excerpt:encoded><![CDATA[]]></excerpt:encoded>
        <wp:post_id>1</wp:post_id>
        <wp:post_date>'.$post_date.'</wp:post_date>
        <wp:post_date_gmt>'.$post_date.'</wp:post_date_gmt>
        <wp:comment_status>open</wp:comment_status>
        <wp:ping_status>open</wp:ping_status>
        <wp:post_name>'.$post_name.'</wp:post_name>
        <wp:status>publish</wp:status>
        <wp:post_parent>0</wp:post_parent>
        <wp:menu_order>0</wp:menu_order>
        <wp:post_type>post</wp:post_type>
        <wp:post_password></wp:post_password>
        <wp:is_sticky>0</wp:is_sticky>
        '.$catStr.'
        '.$tagStr.'
        <wp:postmeta>
            <wp:meta_key>_edit_last</wp:meta_key>
            <wp:meta_value><![CDATA[1]]></wp:meta_value>
        </wp:postmeta>
    </item>
';



// Write the contents back to the file with the appended post
file_put_contents($file, $current.$post);

附加后,我添加下面的代码以完成 xml rss 标记

</channel>
</rss>

如果我查看并比较从 wordpress 站点导出的 xml 文件,我发现差别不大。请帮忙!!

这是生成的 xml 的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
    xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.2/"
>
<channel>
    <title>lols why</title>
    <link>http://localhost/lols</link>
    <description>Just another WordPress site</description>
    <pubDate>Wed, 03 Oct 2012 04:24:04 +0000</pubDate>
    <language>en-US</language>
    <wp:wxr_version>1.2</wp:wxr_version>
    <wp:base_site_url>http://localhost/lols</wp:base_site_url>
    <wp:base_blog_url>http://localhost/lols</wp:base_blog_url>

    <wp:author><wp:author_id>1</wp:author_id><wp:author_login>adedoy</wp:author_login><wp:author_email>wazzup@gmail.com</wp:author_email><wp:author_display_name><![CDATA[adedoy]]></wp:author_display_name><wp:author_first_name><![CDATA[]]></wp:author_first_name><wp:author_last_name><![CDATA[]]></wp:author_last_name></wp:author>


    <generator>http://wordpress.org/?v=3.4.1</generator>

    <item>
        <title>Sample lift?</title>
        <link>../../breast-lift/delaware-breast-surgery-do-i-need-a-breast-lift/</link>
        <pubDate>Wed, 03 Oct 2012 9:29:16 +0000</pubDate>
        <dc:creator>admin</dc:creator>
        <guid isPermaLink="false">http://localhost/lols/?p=1</guid>
        <description></description>
        <content:encoded><![CDATA[<p>sample</p>]]></content:encoded>
        <excerpt:encoded><![CDATA[]]></excerpt:encoded>
        <wp:post_id>1</wp:post_id>
        <wp:post_date>2011-4-0132:45:4</wp:post_date>
        <wp:post_date_gmt>2011-4-0132:45:4</wp:post_date_gmt>
        <wp:comment_status>open</wp:comment_status>
        <wp:ping_status>open</wp:ping_status>
        <wp:post_name>sample-lift?</wp:post_name>
        <wp:status>publish</wp:status>
        <wp:post_parent>0</wp:post_parent>
        <wp:menu_order>0</wp:menu_order>
        <wp:post_type>post</wp:post_type>
        <wp:post_password></wp:post_password>
        <wp:is_sticky>0</wp:is_sticky>
        <category domain="category" nicename="Sample Lift"><![CDATA[Sample Lift]]></category><category domain="category" nicename="Sample Procedures"><![CDATA[Yeah Procedures]]></category>
        <category domain="post_tag" nicename="delaware"><![CDATA[delaware]]></category>
        <wp:postmeta>
            <wp:meta_key>_edit_last</wp:meta_key>
            <wp:meta_value><![CDATA[1]]></wp:meta_value>
        </wp:postmeta>
    </item>
    <item>
        <title>lalalalalala</title>
        <link>../../administrative-tips-for-surgery/delaware-cosmetic-surgery-a-better-experience/</link>
        <pubDate>Wed, 03 Oct 2012 3:20:43 +0000</pubDate>
        <dc:creator>admin</dc:creator>
        <guid isPermaLink="false">http://localhost/lols/?p=1</guid>
        <description></description>
        <content:encoded><![CDATA[
                lalalalalala
            ]]></content:encoded>
        <excerpt:encoded><![CDATA[]]></excerpt:encoded>
        <wp:post_id>1</wp:post_id>
        <wp:post_date>2011-4-0124:39:30</wp:post_date>
        <wp:post_date_gmt>2011-4-0124:39:30</wp:post_date_gmt>
        <wp:comment_status>open</wp:comment_status>
        <wp:ping_status>open</wp:ping_status>
        <wp:post_name>lalalalalala</wp:post_name>
        <wp:status>publish</wp:status>
        <wp:post_parent>0</wp:post_parent>
        <wp:menu_order>0</wp:menu_order>
        <wp:post_type>post</wp:post_type>
        <wp:post_password></wp:post_password>
        <wp:is_sticky>0</wp:is_sticky>
        <category domain="category" nicename="lalalalalala"><![CDATA[lalalalalala]]></category>
        <category domain="post_tag" nicename="oink"><![CDATA[oink]]></category>
        <wp:postmeta>
            <wp:meta_key>_edit_last</wp:meta_key>
            <wp:meta_value><![CDATA[1]]></wp:meta_value>
        </wp:postmeta>
    </item>
</channel>
</rss>

请告诉我我错过了什么......

4

4 回答 4

2

好的,重新讨论并确保我理解你,这是从你的静态文件返回 wordpress 的尝试。

为此,WP codex 上确实列出了三种主要方法,即从 RSS 提要(X)HTML静态页面导入。话虽这么说,如果您有格式良好的 HTML(从您的 JQuery 搜索字符串中可以看到),最简单的方法之一是使用HTML Import 2插件,该插件在 codex 中引用。它为您提供了许多选项来从目录、url 执行此操作,并从新安装的管理屏幕中指定搜索参数。

如果这对您不起作用,或者您真的想将所有页面转换为 XML 以进行导入,因为您已经在使用 PHP 生成 XML,我强烈建议使用 PHP DOM库来打开、解析、提取和从静态文件中写入数据。这将节省您浏览整个站点以生成 XML 所涉及的时间,并且它会一举生成所有页面的完整 XML 文件。

无论哪种方式,我都建议使用纯 RSS 文件,而不是尝试重新创建 WordPress 的自定义格式,因为如果操作得当,它对于所有内容类型都有很多数据库引用(地图 ID 等)。由于您似乎不需要它,因此请尝试制作一个普通的 RSS 文件,该文件具有您所需的最低限度,并且您可以在使用 codex 导入这些帖子后,在必要时编辑这些帖子以重新分配作者等从 RSS 提要导入的说明。这会容易得多。

于 2012-10-08T16:22:00.783 回答
2

我和你的情况类似。我想生成一个 xml 导出文件,其中填充了帖子数据和特色图像。

这是我所做的:

  1. 在我的本地主机上安装 Wordpress
  2. 删除 Wordpress 的默认页面和评论设置
  3. 修改帖子标题、内容等(可选,我这样做是为了更容易在导出的 xml 文件中找到这些信息)
  4. 安装并激活 wordpress 导入器插件
  5. 使用工具导出
  6. 查看xml文件

这是我的xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- generator="WordPress/3.9" created="2014-04-25 14:19" -->
<rss version="2.0"
    xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.2/"
>

<channel>
    <title>wordpresslocal title</title>
    <link>http://wordpresslocal</link>
    <description>Another Wordpress Local Blog</description>
    <pubDate>Fri, 25 Apr 2014 14:19:36 +0000</pubDate>
    <language>de-DE</language>
    <wp:wxr_version>1.2</wp:wxr_version>
    <wp:base_site_url>http://wordpresslocal</wp:base_site_url>
    <wp:base_blog_url>http://wordpresslocal</wp:base_blog_url>

    <wp:author><wp:author_id>1</wp:author_id><wp:author_login>wordpresslocaladmin</wp:author_login><wp:author_email>wordpresslocal@einrot.com</wp:author_email><wp:author_display_name><![CDATA[wordpresslocaladmin]]></wp:author_display_name><wp:author_first_name><![CDATA[]]></wp:author_first_name><wp:author_last_name><![CDATA[]]></wp:author_last_name></wp:author>


    <generator>http://wordpress.org/?v=3.9</generator>

    <item>
                <title>POST TITLE</title>
        <link>http://wordpresslocal/post-title</link>
        <pubDate>Fri, 25 Apr 2014 14:02:29 +0000</pubDate>
        <dc:creator><![CDATA[wordpresslocaladmin]]></dc:creator>
        <guid isPermaLink="false">http://wordpresslocal/?p=1</guid>
        <description></description>
        <content:encoded><![CDATA[POST CONTENT]]></content:encoded>
        <excerpt:encoded><![CDATA[]]></excerpt:encoded>
        <wp:post_id>1</wp:post_id>
        <wp:post_date>2014-04-25 14:02:29</wp:post_date>
        <wp:post_date_gmt>2014-04-25 14:02:29</wp:post_date_gmt>
        <wp:comment_status>open</wp:comment_status>
        <wp:ping_status>open</wp:ping_status>
        <wp:post_name>post-title</wp:post_name>
        <wp:status>publish</wp:status>
        <wp:post_parent>0</wp:post_parent>
        <wp:menu_order>0</wp:menu_order>
        <wp:post_type>post</wp:post_type>
        <wp:post_password></wp:post_password>
        <wp:is_sticky>0</wp:is_sticky>
        <category domain="category" nicename="category1"><![CDATA[CATEGORY1]]></category>
        <category domain="post_tag" nicename="tag1"><![CDATA[TAG1]]></category>
        <wp:postmeta>
            <wp:meta_key>_thumbnail_id</wp:meta_key>
            <wp:meta_value><![CDATA[6]]></wp:meta_value>
        </wp:postmeta>
    </item>
</channel>
</rss>
于 2014-04-25T18:37:04.303 回答
1

自定义 WordPress 导出/导入 XML 实际上适用于从其他数据库创建的内容 - 我已经能够导入帖子、页面、元数据、附件、评论等。

但它确实对某些元素相当挑剔——比如如果两个帖子共享相同的创建时间,只插入一个,第二个帖子被认为是重复的(因此必须将随机时间添加到仅限日期的源)。

在您的示例中 wp:post_date 似乎与日期格式相去甚远,因此这可能是触发重复检测的原因,导致导入单个帖子。

于 2013-07-02T06:13:46.657 回答
1

你有

<wp:post_id>1</wp:post_id>

在这两个项目中。我想这是主要问题,因为这是主键。

于 2014-12-16T17:06:54.907 回答