Add mime types with plugin

时间:2011-12-02 作者:joshmax

我尝试了一些插件来添加mime类型,包括PJW Mime Config 插件。并将此添加到主题functions.php 对于非WPMS站点,该文件也可以正常工作。但我需要这些在整个网络中都是允许的。

因此,我编写了自己的插件来实现这一目的。在查看了codex的信息以及一些博客帖子和this WPSE question. 这就是我想到的:

function new_mime_types($mimes) {
    $mimes = array_merge($mimes, array( 
        \'pdf\' => \'application/pdf\',
        \'zip\' => \'multipart/x-zip\'
        //add your ext => mime to the array
        //there are a LOT more, but to save space I\'ve left the rest out :)
        ));
    return $mimes;
}

// Hook
add_filter(\'upload_mimes\', \'new_mime_types\');
现在,当我上传其中一种文件类型时,会收到一条警告:

Warning: 无法修改标头信息-标头已由(输出开始于[服务器]\\wp content\\plugins\\tps mime types.php:1)发送[server]\\wp-includes\\pluggable.php 在…上line 934.

我对WP还是新手,所以对下一步做什么有什么建议吗?

Note: 还有,我想把这个标记为upload-mimesmime-types, 但没有代表:)

我已将插件更新为以下代码:

function new_mimes($mimes) {

    // add your mime to the txt file below
    // same formating and no spaces

    // mime-types.txt file set up like this...
    // pdf|application/pdf
    // zip|multipart/x-zip
    $file = "/tps-mime-types/mime-types.txt";
    $contents = file_get_contents( plugins_url( $file ) );
    $contents = str_replace( "\\r", "|", $contents );
    $contents = str_replace( "\\n", "|", $contents );
    $mime_types = explode( "|", $contents );

    $counter=0;
    foreach ( $mime_types as $ext_app ) {
        if( !isset( $ext_app[0] ) ) $ext_app[0] = $ext_app[1];
        $counter++;
    }

    // return the new full result
    return $mimes;
}

add_filter(\'upload_mimes\', \'new_mimes\');
但是,在WPMS安装中激活插件后,我已经安装了一段时间,而且只安装了一次,但我仍然遇到了问题。激活后:

插件生成了3个字符unexpected output 激活期间。如果您注意到“headers ready sent”消息、联合提要问题或其他问题,请尝试停用或删除此插件。

然后,当我尝试上载与新mime类型之一匹配的文件时,我收到了原始错误消息:

Warning: 无法修改标头信息-标头已由(输出开始于[服务器]\\wp-content\\plugins\\tps-mime-types\\tps-mime-types.php:1)在中发送[server]\\wp-includes\\pluggable.php 在…上line 934

有什么想法吗?

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

找到了!:D

以下是新代码:

// Add the filter
add_filter(\'upload_mimes\', \'tqps_extended_mime_types\');

// Function to add mime types
function tqps_extended_mime_types ( $mime_types=array() ) {

    // add your extension & app info to mime-types.txt in this format
    //   doc,doct application/msword
    //   pdf application/pdf
    // etc...
    $file = \'/extended-mime-types/mime-types.txt\';
    $file = plugins_url() . $file;
    $mime_file_lines = file($file);

    foreach ($mime_file_lines as $line) {
        //Catch all sorts of line endings - CR/CRLF/LF
        $mime_type = explode(" ",rtrim(rtrim($line,"\\n"),"\\r"));
        $mime_types[$mime_type[0]] = $mime_type[1];
    }

    // add as many as you like
    return $mime_types;
}
确保将代码另存为extended-mime-types.php 在名为extended-mime-types/. 并创建一个名为mime-types.txt.

mime-types.txt 格式必须如下所示:

doc,doct application/msword
pdf application/pdf
祝你好运!

SO网友:chrisguitarguy

很明显,你的插件产生了一个错误!

更具体地说,这些允许的mime类型的调用方式使此错误发生在WordPress实际开始发送输出之前。结果是:一条错误消息get被打印出来,然后WP尝试发送其标题,您的错误就发生了。

试试这个:

<?php
function wpse35410_new_mime_types($mimes) {
    if( ! isset( $mimes[\'pdf\'] ) ) $mimes[\'pdf\'] = \'application/pdf\';
    if( ! isset( $mimes[\'zip\'] ) ) $mimes[\'zip\'] = \'multipart/x-zip\';
    // etc.
    return $mimes;
}
我可能会完全离开这里,但我怀疑就是这样。我无法用你的代码再现错误,所以我不能百分之百确定。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴