Google Docs查看器在多站点子博客中出现问题

时间:2012-09-02 作者:Ünsal Korkmaz

示例文件:http://twentyeleven.korkmaz.biz/files/2012/09/example.docx

这里是相同的文件,但没有ms文件的直接url。php:http://twentyeleven.korkmaz.biz/wp-content/blogs.dir/3/files/2012/09/example.docx

它是同一个文件。首先是接到ms文件的电话。php。问题是google docs viewer中的第一个文件不工作:http://docs.google.com/viewer?url=http://twentyeleven.korkmaz.biz/files/2012/09/example.docx

出现此错误:

很抱歉,目前无法生成文档的视图。请稍后再试。您也可以单击此处下载原始文档。

但如果我直接调用同一个文件,而不调用ms文件。php:http://docs.google.com/viewer?url=http://twentyeleven.korkmaz.biz/wp-content/blogs.dir/3/files/2012/09/example.docx

它起作用了!因此,出于某种原因,wordpress multisite正在破坏子博客中的文件。主博客中没有问题,因为主博客的文件直接被调用,而不使用ms文件。php

那么我该如何解决这个问题呢?如果你认为我无法修复它,我如何才能从WordPress生成的/文件/url中获得真正的路径url?

2 个回复
最合适的回答,由SO网友:Otto 整理而成

3.4.2的唯一修复方法涉及对核心文件进行黑客攻击。该问题已在即将发布的3.5版中得到纠正。

编辑wp包括/功能。php。在1810线附近,您会发现:

\'doc|docx\' => \'application/msword\',
将其更改为:

\'doc\' => \'application/msword\',
docx文件扩展名实际上已经在文件后面的第1819行正确处理了:

\'docx|dotx\' => \'application/vnd.openxmlformats-officedocument.wordprocessingml\',
因此,一旦您删除伪扩展,它将正常工作。

再次强调,黑客攻击核心文件是一件坏事,但鉴于WordPress 3.5中的重构已经纠正了这个问题,而且在插件或主题中,甚至在适当的插件中,都无法做到这一点,我认为这个具体案例可能证明了这一点。

SO网友:Bendoh

无论使用何种链接,生成的文件都是相同的。我通过每个链接下载了文件,并比较了这些文件,它们是相同的。

所以结论是,这是一个标题的问题。我从ms博客版本的url中获得的信息是:

Content-Type: application/msword
与我从direct link获得的相比:

Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
这似乎是谷歌文档理解的一种类型。

我的结论是WordPress为该文件提供的MIME类型,application/msword, 谷歌文档并不理解这一点。

您可以通过筛选来解决此问题upload_mimes, 以及更改的结果MIME类型。docx文件与Google Docs理解的正确文件相匹配:

function my_filter_upload_mimes( $mimes ) {
     $mimes[\'doc|docx\'] = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
     return $mimes;
}
add_filter( \'upload_mimes\', \'my_filter_upload_mimes\' );
WordPress在函数中使用此筛选器get_allowed_mime_types(), 所使用的wp_check_filetype() 确定中的输出MIME类型wp-includes/ms-files.php

Update

wp-includes/ms-files.php 使用SHORTINIT, 因此不会加载主题,因此如果将其放置在主题代码中,则上述代码将无法工作。

另一方面,插件仍将加载SHORTINIT 已启用

(Otto编辑:这是不正确的,SHORTINIT阻止插件加载。请参阅第95行附近的wp-settings.php,了解SHORTINIT标志在何处切断加载过程,并注意在此之后加载插件。以下代码将不起作用。)

(Bendoh编辑:D\'oh!我在测试时注释掉了SHORTINIT声明,因此我的解决方案did 工作,但你是对的,如果不弄脏核心,它就不会工作。我删除了下面的代码,因为它实际上不起作用。奥托的回答是正确的)

结束

相关推荐

WordPress MultiSite中的批量主题设置

我有一个有500多个子网站的多网站。我想在所有500多个网站上安装相同的主题。大多数都需要配置,如选择侧栏(左/右)、选择主菜单等。是否有任何插件可用于此工作?奥坎有人能给我一些建议吗?谢谢