导入媒体失败


14

当我使用[工具>导出]生成XML文件并在另一个WordPress网站上使用[工具>导入]时,对于每种附件帖子类型,我都会收到“无法导入媒体”的信息。并且无法加载的图像会与先前的服务器进行热链接,从而消耗了先前服务器的传输...

但是,当我从http://codex.wordpress.org/Theme_Unit_Test下载“单元测试”时,则不存在此问题。某些图像仍具有“无法导入媒体”,但仅占30张图像中的5张。他们以XML格式拥有指向其自己服务器的URL,但是以某种方式[工具>导入]设法下载其媒体并将这些URL替换为新位置(不再进行热链接)。

使其在没有“无法导入媒体”的情况下正常工作的诀窍是什么?为什么甚至“单元测试”也有一些“无法导入媒体”消息?


由于导入的服务器需要从旧位置获取文件,因此您不仅应检查文件是否在旧服务器上,还应检查新服务器是否可以获取它们。也许某些限制了出站请求。您是否尝试过将其导入另一台服务器或本地主机上?恐怕这可能是一个非常本地化的问题。
kraftner 2014年

1
从WordPress 4.3.1开始(可能是更早的版本),您可以定义IMPORT_DEBUG并将其设置true为获取有意义的反馈,而不仅仅是“无法导入媒体”。我无法想象为什么这不是默认行为。如果天气合适,那可以帮助您缩小问题范围。
2015年

@Mark我可以在哪个文件中设置IMPORT_DEBUG选项
kimliv

2
@kimliv:您需要将其粘贴在WordPress安装目录的wp-config.php中define ( 'IMPORT_DEBUG', true );
2016年

抱歉,遇到同样的问题,并且我导入的原始站点的SSL无法正常工作,并且xmlURL处于打开状态https,请编辑xml文件以切换httpshttp帮助。
塞缪尔·埃尔

Answers:


12

当我将WordPress博客从单个WordPress安装移动到具有不同域名但具有相同IP的多站点安装时,我遇到了一个非常相似的问题。
我发现问题在于wp_http_validate_url如果源IP与目标IP相同,则会删除URL 的功能。
您可以添加一个过滤器wp_http_validate_url来防止这种情况,并允许匹配源IP和目标IP:

add_filter( 'http_request_host_is_external', '__return_true' );

请参阅以下答案以获取有关过滤器挂钩的详细说明以及为什么在导入后应将其删除:https : //wordpress.stackexchange.com/a/123313/75573


我花了将近5个小时来尝试导入带有他们的图片的帖子,这解决了它。
强尼

我不确定是否了解该修改的目的。有人可以进一步解释吗?
ClairelyClaire

您可以将其放在functions.php中或放入插件中。后者使根据需要打开和关闭它更容易。
Merl

1

生成导出文件时,它是在实时服务器还是本地主机上?该网页仍可访问吗?如果媒体导入失败,则意味着从XML链接出来的图像将出现404。

打开XML文件,然后查看图像所指向的位置。如果打开主题单元XML文件,我们将看到以下行:

<wp:attachment_url>http://wpthemetestdata.files.wordpress.com/2008/06/canola2.jpg</wp:attachment_url>

该文件很明显可以导入。您的attach_url文件说什么?


1
我提到“无法将加载失败的图像与先前的服务器进行热链接,从而消耗了先前服务器的传输...”,这表明图像未返回404,它们不在localhost上,但仍会生成“无法导入媒体”。我也<wp:attachment_url>example.com/2008/06/image.jpg,其中example.com始终是可访问的域。这就是为什么我问这个问题:)即使图像不生成404,它显然也不起作用。它甚至与wpthemetestdata.files.wordpress.com有时也不起作用(30个随机图像中有5个失败)。
保罗

是的,很抱歉,到了晚上,我的大脑有点疲倦了。服务器上是否有某种热链接保护?
势在必行的想法

1
不会,它是具有可公开访问映像的可公开访问服务器,无任何保护措施。但是,即使有一些保护措施,WordPress的服务器偶尔也会执行相同的操作。这是否意味着该进口商只是越野车?
保罗

该服务器或其中一台服务器具有令人讨厌的短超时值。我对你没什么主意。XML是否正确导入到Localhost?如果是这样,您可以作弊...在本地进行导入,然后使用WP Migrate DB并将结果克隆为实时格式。
势在必行的想法

1

我一直在努力从wordpress.com导入媒体到wordpress.org。我设法导入了所有帖子,但是图像仍然链接到旧站点。我几乎哭了,因为我意识到唯一的解决方案是手动下载并上传200张以上的大图片(导出/导入帖子的较小部分也不起作用)。

在测试了一些插件之后,我发现一个插件实际上可以自动导入您的wordpress媒体。我不敢相信,但它确实有效。您必须逐个发布,但仍然比手动下载和上传更好。如果有人感兴趣,这是链接


1

确保您的网站未设置为“私人”。

导出Wordpress博客时,所有文本内容都会嵌入到生成的XML文件中。所有二进制内容(图片,文件附件等)都将作为URL导出,指向它们在现有博客中的位置。这就是为什么当您从私人Wordpress博客导入时,您仍然可以导入所有帖子/等,但是所有图像/等都将失败。

从当前版本(2017-06-19)开始,您需要在此处更改设置:

在此处输入图片说明

相关的Wordpress文档:

https://en.support.wordpress.com/settings/privacy-settings/

请注意,这需要从您的Wordpress.com帐户的设置中完成,而不是从博客本身的设置中完成,这是另一个可能引起混乱(和沮丧)的地方。


1

在远程/本地站点上使用某些插件时,可能会发生此问题。

理想情况下,在导出或导入之前禁用两个站点上的所有插件,然后在该过程完成后重新激活它们。

如果您试图避免禁用所有插件,则至少停用所有影响图像或图像处理的插件……最常见的类型可能是那些进行图像优化的插件。

就我而言,我在本地站点上激活了EWWW Image Optimizer(我强烈建议),这导致了此错误。我禁用了它,成功运行了导入,然后重新激活了它。


0

我遇到了同样的问题,经过数小时的搜索和测试,问题在于源服务器由于cPanel中的“ Hotlink Protection”处于活动状态而阻止了图像下载。


你是对的。就我而言,我意识到自己在.htaccess中实现了热链接保护。其他情况是cPanel或Cloudflare。
John Doe

0

对于那些不想使用add_filter或不知道如何在不创建单独模块的情况下进行集成的人。这是完成任务的快速便捷技巧。

打开这个文件

vim ./wp-includes/http.php

转到行 566并注释掉以下代码块。

if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) )
  return false;

将这两行注释掉后,进入并添加以下行。

return true;

继续并保存文件,然后上传XML文件,然后重试。现在,您将下载所有相关内容。返回删除注释块和return语句,一切就好了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.