创建要在wordpress后导入中使用的xml文件

时间:2012-10-03 09:23:43

标签: php jquery xml ajax wordpress

好的就是这件事,我有这个网站 一旦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 个答案:

答案 0 :(得分:2)

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

为此,WP codex中列出了关于importing from an RSS feed(X)HTMLstatic pages的三种主要方法。这就是说,如果你有一个格式良好的HTML,你可以从你的JQuery搜索字符串中看到的最简单的方法之一就是使用在codex中引用的HTML Import 2插件。它为您提供了许多选项,可以从目录,URL中执行此操作,并从新安装的管理屏幕中指定搜索参数。

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

无论哪种方式,我建议使用普通的RSS文件,而不是尝试重新创建WordPress的自定义格式,因为正确完成后,它为所有内容类型提供了大量数据库引用(映射ID等)。因为它似乎不需要它,所以尝试制作一个普通的RSS文件,其中只有你需要的最小值,你可以编辑这些帖子以重新分配作者等,如果有必要,在你使用codex导入之后importing from an RSS feed的说明。这会容易得多。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

这就是我的所作所为:

  1. 在我的localhost上安装Wordpress
  2. 删除Wordpress的默认页面和评论设置
  3. 修改帖子标题,内容等(可选,我这样做,以便在导出的xml文件中更容易找到这些信息)
  4. 安装并激活wordpress导入程序插件
  5. 使用工具导出
  6. 查看xml文件
  7. 这是我的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>
    

答案 3 :(得分:1)

你有

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

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