簡體   English   中英

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') . '/$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。 根據情況,您可以省略該部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM