wp_plupload_default_settings()
云策文档标注
概述
wp_plupload_default_settings() 函数用于生成并输出 Plupload 的默认设置,包括上传参数、过滤器配置和浏览器支持检测。它通过 wp_scripts() 管理脚本数据,并应用过滤器允许开发者自定义设置。
关键要点
- 函数生成 Plupload 的默认设置数组,包括文件上传 URL、最大文件大小和允许的扩展名。
- 针对移动设备和特定浏览器版本(如 iOS 7.x)进行条件设置,例如禁用多文件选择。
- 检查图像编辑器对 WebP、AVIF 和 HEIC 格式的支持,并相应设置错误标志。
- 使用 apply_filters 钩子(如 plupload_default_settings 和 plupload_default_params)允许开发者修改默认设置和参数。
- 最终设置通过 wp_json_encode 编码为 JavaScript 变量 _wpPluploadSettings,并添加到 wp-plupload 脚本数据中。
代码示例
// 示例:使用过滤器修改 Plupload 默认设置
add_filter( 'plupload_default_settings', function( $defaults ) {
$defaults['filters']['max_file_size'] = '10485760b'; // 设置为 10MB
return $defaults;
} );注意事项
- 从 WordPress 4.9 开始,Plupload 的 runtimes 设置固定为 'html5,html4',flash_swf_url 和 silverlight_xap_url 不再使用。
- 在 iOS 7.x 的 Safari 移动版中,由于已知 bug,多文件上传被禁用以避免视频上传问题。
- 函数依赖于多个辅助函数,如 wp_max_upload_size() 和 get_allowed_mime_types(),确保上传设置符合服务器配置。
原文内容
Prints default Plupload arguments.
Source
function wp_plupload_default_settings() {
$wp_scripts = wp_scripts();
$data = $wp_scripts->get_data( 'wp-plupload', 'data' );
if ( $data && str_contains( $data, '_wpPluploadSettings' ) ) {
return;
}
$max_upload_size = wp_max_upload_size();
$allowed_extensions = array_keys( get_allowed_mime_types() );
$extensions = array();
foreach ( $allowed_extensions as $extension ) {
$extensions = array_merge( $extensions, explode( '|', $extension ) );
}
/*
* Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4`,
* and the `flash_swf_url` and `silverlight_xap_url` are not used.
*/
$defaults = array(
'file_data_name' => 'async-upload', // Key passed to $_FILE.
'url' => admin_url( 'async-upload.php', 'relative' ),
'filters' => array(
'max_file_size' => $max_upload_size . 'b',
'mime_types' => array( array( 'extensions' => implode( ',', $extensions ) ) ),
),
);
/*
* Currently only iOS Safari supports multiple files uploading,
* but iOS 7.x has a bug that prevents uploading of videos when enabled.
* See #29602.
*/
if ( wp_is_mobile()
&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' )
&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' )
) {
$defaults['multi_selection'] = false;
}
// Check if WebP images can be edited.
if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
$defaults['webp_upload_error'] = true;
}
// Check if AVIF images can be edited.
if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) {
$defaults['avif_upload_error'] = true;
}
// Check if HEIC images can be edited.
if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/heic' ) ) ) {
$defaults['heic_upload_error'] = true;
}
/**
* Filters the Plupload default settings.
*
* @since 3.4.0
*
* @param array $defaults Default Plupload settings array.
*/
$defaults = apply_filters( 'plupload_default_settings', $defaults );
$params = array(
'action' => 'upload-attachment',
);
/**
* Filters the Plupload default parameters.
*
* @since 3.4.0
*
* @param array $params Default Plupload parameters array.
*/
$params = apply_filters( 'plupload_default_params', $params );
$params['_wpnonce'] = wp_create_nonce( 'media-form' );
$defaults['multipart_params'] = $params;
$settings = array(
'defaults' => $defaults,
'browser' => array(
'mobile' => wp_is_mobile(),
'supported' => _device_can_upload(),
),
'limitExceeded' => is_multisite() && ! is_upload_space_available(),
);
$script = 'var _wpPluploadSettings = ' . wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ';';
if ( $data ) {
$script = "$datan$script";
}
$wp_scripts->add_data( 'wp-plupload', 'data', $script );
}
Hooks
- apply_filters( ‘plupload_default_params’, array $params )
-
Filters the Plupload default parameters.
- apply_filters( ‘plupload_default_settings’, array $defaults )
-
Filters the Plupload default settings.
Changelog
| Version | Description |
|---|---|
| 3.4.0 | Introduced. |