wordpress - 在维护链接的同时以编程方式插入帖子
wordpress - Insert posts programmatically while maintaining links
我目前正在编写一个迁移脚本,用于将 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>]]>
Testsite.fi 是我自己的网站,所以这些是内部链接。
这些链接指的是 PDF,这应该插入到 wordpress 中,但显然链接会有所不同。我确实有被引用的 PDF(例如:elakkeen_hakeminen_ulkomailta.pdf,它们与此脚本位于同一文件夹中)所以所需要做的就是以编程方式在 Wordpress 中上传此文件或手动将其移动到正确的位置,然后更新链接以使其仍然有效。
知道怎么做吗?我正在用正则表达式猜测一些东西,但无法真正弄明白。
要更改所有内部链接,您可以使用:
$content = preg_replace('%href="http://www\.testsite\.fi/(.*)"%', 'href="' get_bloginfo('wpurl') . '/"', $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'] . '/.pdf"', $article['description'], -1);
其中 </code> 是 pdf 的文件名。</p>
<p>注:</p>
<p>正则表达式中的 <code>href
部分不是必需的,但可确保您不会更改不在 href
属性内的网址。根据情况,您可以省略该部分。
我目前正在编写一个迁移脚本,用于将 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>]]>
Testsite.fi 是我自己的网站,所以这些是内部链接。
这些链接指的是 PDF,这应该插入到 wordpress 中,但显然链接会有所不同。我确实有被引用的 PDF(例如:elakkeen_hakeminen_ulkomailta.pdf,它们与此脚本位于同一文件夹中)所以所需要做的就是以编程方式在 Wordpress 中上传此文件或手动将其移动到正确的位置,然后更新链接以使其仍然有效。
知道怎么做吗?我正在用正则表达式猜测一些东西,但无法真正弄明白。
要更改所有内部链接,您可以使用:
$content = preg_replace('%href="http://www\.testsite\.fi/(.*)"%', 'href="' get_bloginfo('wpurl') . '/"', $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'] . '/.pdf"', $article['description'], -1);
其中 </code> 是 pdf 的文件名。</p>
<p>注:</p>
<p>正则表达式中的 <code>href
部分不是必需的,但可确保您不会更改不在 href
属性内的网址。根据情况,您可以省略该部分。