让我们假设官方的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文件编写自定义解析器)。
通过在数据库上进行简单的搜索/替换,可以替换数据库中的主机并上传提取的图像。也欢迎更好的解决方案。
答案 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";
}