WordPress.com到WordPress.org迁移:如何下载wp-content文件夹?

时间:2015-11-12 20:23:59

标签: wordpress migration

让我们假设官方的WordPress导入/导出插件不适用于每个主机以及localhost。让我们假设可以导入帖子,但不能导入媒体。让我们假设WordPress.com不提供从他们的网站下载所有媒体的免费可能性。

http://example.com/目前托管于WordPress.com

大量上传的图片都是这样托管的:

https://example.files.wordpress.com/2014/11/1.png https://example.files.wordpress.com/2015/11/1.png 等等....

可能性1:是否有工具可以下载博客上托管的所有图像,同时保留文件夹结构(我还没有找到)。

可能性2:是否有可能使用XML导出文件从WordPress.com下载所有媒体(尤其是图像),但没有官方的WordPress导入工具(无需为XML文件编写自定义解析器)。

通过在数据库上进行简单的搜索/替换,可以替换数据库中的主机并上传提取的图像。也欢迎更好的解决方案。

1 个答案:

答案 0 :(得分:0)

使用以下脚本解决了这个问题。这可能对每个遇到同样问题的人都有帮助:

(的index.php)

<?php include('functions.php'); ?>
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form action="#" method="post" enctype="multipart/form-data">
          Choose the XML export file from WordPress.com (one-by-one). Execute the script with the same file until you see "success":<br> 
            <input name="myfile" type="file" size="50" accept="text/*"> 
          </p>  
          <button type="submit">... go download em all!</button>
        </form>
    </body>
</html>

(的functions.php)

<?php

if (isset($_FILES['myfile']) && ($_FILES['myfile']['error'] == UPLOAD_ERR_OK)) {
    // $xml = simplexml_load_file($_FILES['myfile']['tmp_name']); 

    $filestr = file_get_contents($_FILES['myfile']['tmp_name']);
    $matches = null;
    $returnValue = preg_match_all('/https:\\/\\/mydomain.files.wordpress.com\\/[0-9]{4}\\/[0-9]{2}\\/[^<>\\/]+(\\.jpg|.png|.gif|.jpeg|.bmp)/',$filestr,$matches);



    foreach($matches[0] as $image_url) {
        $rep = str_replace("https://mydomin.files.wordpress.com",'',$image_url);
        $save_path = "/images".$rep;

        // if not image already downloaded
        if(!file_exists(dirname(__FILE__).$save_path)) {
            $img_only = strrchr($save_path,"/");
            $path = dirname(__FILE__).str_replace($img_only,"",$save_path);
            if(!is_dir($path)) {
                mkdir($path, 0777,true);
            }
            file_put_contents(dirname(__FILE__).$save_path, fopen($image_url, 'r'));
        }
    }
    // if not reached, repeat the script
    echo "success";

}