SO网友:Frank P. Walentynowicz
原始答案
将下面的代码添加到当前主题的
functions.php
:
function wpse_add_nb_mime_type( $allowed_mimes ) {
$allowed_mimes[\'nb\'] = \'application/mathematica\';
return $allowed_mimes;
}
add_filter( \'mime_types\', \'wpse_add_nb_mime_type\', 10, 1 );
删除
define
, 在您的问题中提到,来自
wp-config.php
. 现在你应该可以上传
.nb
文件。
Plugin alternative: 要使上述代码不受主题更改的影响,最好将其放入插件中。创建新文件wpse-addnbmimetype.php
, 使用此内容:
<?php
/*
Plugin Name: WPSE Add NB Mime Type
Description: Adds \'nb\' => \'application/mathematica\' to allowable mime types
*/
function wpse_add_nb_mime_type( $allowed_mimes ) {
$allowed_mimes[\'nb\'] = \'application/mathematica\';
return $allowed_mimes;
}
function wpse_prepare_add_nb_mime_type() {
// this filter can be added as early as in init action
add_filter( \'mime_types\', \'wpse_add_nb_mime_type\', 10, 1 );
}
add_action( \'init\', \'wpse_prepare_add_nb_mime_type\' );
将此文件放入“/wp-content/mu-plugins/”文件夹。现在,您可以切换主题,而不会丢失上载功能。nb文件。
分析
首先阅读对@majick答案的评论。经过所有更正后,他的过滤器将如下所示:
add_filter(\'upload_mimes\', \'modify_upload_mimes\', 10, 2);
function modify_upload_mimes($t, $user) {
if ($user == null) {$user = wp_get_current_user();}
if (in_array(\'administrator\', $user->roles)) {
$t[\'nb\'] = \'application/mathematica\';
}
return $t;
}
它有效吗?是的,但它确实限制了文件的上载。仅“管理员”角色的nb扩展。作者和编辑将无法上载此类文件。让我们通过替换行来更改它:
if (in_array(\'administrator\', $user->roles)) {
使用:
if ( $user->has_cap( \'upload_files\' ) ) {
现在,作者、编辑和管理员可以上传。nb文件。
不鼓励针对用户角色进行检查,而应针对用户的功能进行检查。如果有一天,我们决定将“upload\\u files”功能添加到贡献者的角色(所有贡献者)或单个用户,我们的过滤器将正常工作,不会进行更改。
为什么我们有两个挂钩,可以选择“mime\\u类型”和“upload\\u mimes”?建议使用“mime\\U types”添加mime类型,使用“upload\\U mimes”删除(取消设置)mime类型。
“/wp includes/functions”中有两个函数。php“:第一个-get_allowed_mime_types( $user = null )
, 引入“upload\\u mimes”过滤器挂钩,用于任意删除“swf”、“exe”,并有条件删除“htm | html”、mime类型和第二个-wp_get_mime_types()
, 引入“mime\\U类型”过滤器挂钩,用于添加mime类型。
结论
从技术上讲,我们可以使用任意一个钩子作为解决方案,但根据建议,应该使用“mime\\U类型”。无需检查用户的功能,因为只有具有“upload\\u files”功能的用户才会触发两个挂钩。