Php wordpress-在维护链接时以编程方式插入帖子

Php wordpress-在维护链接时以编程方式插入帖子,php,xml,wordpress,migration,Php,Xml,Wordpress,Migration,我目前正在编写一个迁移脚本,将XML中的文章插入Wordpress 到目前为止,我解析了XML并在PHP中创建了数组,我正在遍历这些数组,并使用以下代码将它们逐一插入Wordpress: $post = array( 'post_title' => wp_strip_all_tags($article['title']), 'post_content' => $article['description'],

我目前正在编写一个迁移脚本,将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),内容中可以有指向同一网站上文件的链接,例如:

<![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>]]>
快捷方式:

]>
fi是我自己的网站,所以这些是内部链接

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


你知道怎么做吗?我在猜测正则表达式的某些内容,但无法真正理解。

要更改所有内部链接,可以使用以下方法:

$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
属性中的URL。根据具体情况,您可以省略该部分。

您可以将文件复制到上载文件夹中,这些文件将可以访问。只是Wordpress还不知道他们的情况,但你可以控制他们的位置。也许在一些文件api中,codex应该提供一些选项。你不需要用正则表达式解析HTML片段,只需要用DOMDocument。允许你更改链接。谢谢,上传部分已经搞定了。只是还不确定DOMDocument,对此并不熟悉。我想这里有一个关于如何解析HTML和更改URL的类似示例:上面示例中的URL没有文件类型。。。这是故意的吗?此外,你是只想更改指向PDF的链接,还是想更改所有内部链接?@alpipego:不幸的是,我们就是这样获得链接的,我知道在这种情况下,它们恰好是PDF。是的,我们想改变所有的内部链接。