wordpress - 在保持链接的同时以编程方式插入帖子

时间:2015-08-07 06:20:14

标签: php xml wordpress migration

我目前正在开发一个迁移脚本,用于将文章从XML插入到Wordpress中。

到目前为止,我解析了XML并在PHP中创建了数组,我循环遍历这些数组,然后使用以下代码将它们一个接一个地插入到Wordpress中:

$post = array(
            'post_title'    => wp_strip_all_tags($article['title']),
            'post_content'  => $article['description'],
            'post_status'   => 'publish',
            'post_author'   => 1,
            'ping_status'   => 'closed',
            'post_date'     => $dateTime->format('Y-m-d H:i:s'),
            'post_type'     => $post_type
        );

        $result = wp_insert_post($post);

一切顺利,但问题出现了:XML是从网站导出的(遗憾的是我不知道哪个CMS),在内容中可以链接到同一网站上的文件,例如:< / p>

<![CDATA[<p><strong>Shortcuts:</strong></p>
<p/>
<ul>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/elakkeen_hakeminen_ulkomailta">(Booklet in Finnish)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/sa_har_soker_du_pension_fran_utlandet">(Booklet in Swedish)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/pensioni_taotlemine_valismaalt">(Booklet in Estonian)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/poluchenie_pensii_iz_drugih_stran">(Booklet in Russian)</a> 
</li>
</ul>]]>

Testsite.fi是我自己的网站,因此这些是内部链接。

这些链接指的是PDF,这应该插入到wordpress中,但显然链接会有所不同。我确实有被引用的PDF(例如:elakkeen_hakeminen_ulkomailta.pdf,它们与此脚本位于同一文件夹中)所以所需要的只是以编程方式在Wordpress中上传此文件或手动将其移动到正确的位置,然后更新链接,使其仍然有效。

有任何线索如何做到这一点?我正在用正则表达式猜测,但无法弄明白。

1 个答案:

答案 0 :(得分:1)

要更改所有内部链接,您可以使用:

$content = preg_replace('%href="http://www\.testsite\.fi/(.*)"%', 'href="' get_bloginfo('wpurl') . '/$1"', $article['description'], -1);

$post = array(
    'post_title'    => wp_strip_all_tags($article['title']),
    'post_content'  => $content,
    'post_status'   => 'publish',
    'post_author'   => 1,
    'ping_status'   => 'closed',
    'post_date'     => $dateTime->format('Y-m-d H:i:s'),
    'post_type'     => $post_type
);

$result = wp_insert_post($post);

由于示例中的pdf没有文件类型,因此无法以编程方式识别它们。否则它将是:

$upload_dir = wp_upload_dir();
$content = preg_replace('%href="http://www\.testsite\.fi/(.*)/(.*).pdf"%', 'href="' . $upload_dir['url'] . '/$2.pdf"', $article['description'], -1);

其中$2是pdf的文件名。

注意:

正则表达式中的href部分不是必需的,但可以确保您不会更改不在href属性内的网址。根据具体情况,您可以将该部分保留下来。